2011-10-03 133 views
0

错误代码,我想从数据库中添加员工与属性ID和empName记录表 '池'如何捕捉在PHP

theform.html

<FORM NAME ='form2' METHOD ='POST' ACTION ='result.php' enctype="multipart/form-data"> 
<B>Board Write</B> <BR> 

<INPUT TYPE = Text Name = empID value = 'write ID here'> 
<INPUT TYPE = Text Name = empName VALUE = 'write name here'><P> 
<INPUT TYPE = 'Submit' Name = Submit2 VALUE = 'Post'> 

</FORM> 

result.php

<?PHP 

     $ID = $_POST['empID']; 
     $NAME = "'" . $_POST['empName'] . "'"; 

     $server = "127.0.0.1"; //connect to server 
     $user_name = "root"; 
     $password = ""; 

     $database = "employees"; 


    $db_handle = mysql_connect($server, $user_name, $password); 
    $db_found = mysql_select_db($database, $db_handle); 


if($db_found){// there is a database 

$tableSQL = "INSERT INTO pool(ID, empName) VALUES " . "(" . $ID . "," . $NAME . ")"; 


$result = mysql_query($tableSQL); 

    if($result){ 
      print "success!"; 
    } 
    else{ 
      print "fail!"; 
     } 


} 

    mysql_close($db_handle); //close the connection; 



?> 

在数据库中,ID是唯一的,也是INT数据类型,我想捕获用户输入数据库中已存在的ID值的错误代码。我们如何做到这一点?

+2

首先,您应该防止发生任何错误,例如:通过[保护您的脚本免受SQL注入](http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php)。然后你应该[查看mysql函数的手册](http://www.php.net/manual/en/function.mysql-errno.php)。 – hakre

+0

什么是'$ id'?为什么用户指定它? – zerkms

+0

您可以使用['mysql_error'](http://www.php.net/manual/en/function.mysql-error.php)检索错误消息,以避免出现'$ result === false'的情况。请注意,您的数据库代码非常不安全并且允许SQL注入。 –

回答

0

通常,最好是防止SQL错误而不是捕获它们。例如,在尝试插入记录之前,请检查重复是否存在。

要完全避免此问题,可以使用auto-increment字段作为ID,并允许数据库自动分配新号码。那么用户将永远不需要输入它,所以不会因重复而出现冲突。

如果你还需要检查错误,那么你可以使用mysql_error()mysql_errno()函数来获取错误的详细信息。

0
// returns true if duplicated 
function duplicate_catch_error ($database_connection) { 
    $mysql_error = array (1022 => "Can't write; duplicate key in table '%s'",1062 => "Duplicate entry '%s' for key %d", 1586 => "Duplicate entry '%s' for key '%s'"); // also allows for the use of sscanf 
    if (array_key_exists(mysql_error($database_connection),$mysql_error)) // checks if error is in array 
     return true; 
    else 
     return false; 
} 

希望这回答了你的问题,也MySQL是现在贬值。如果您还不知道,请使用mysqli :)