2012-10-21 43 views
0

这不是一个问题,而是一个备注我应该认为非常有用。PHP/MYSQL零错误代码:REMARK

下面一段代码

$sql="UPDATE Adherents 
     SET Prenom='$_POST[tfPrenom]', 
       Civilite='$_POST[mdCivil]', 
       ..... 
     WHERE No_Adherent=$LeNumero"; 

[随后通过通常mysqli_query()调用]

会不断地失败,并且极其难以调试:下 '死' 状态

if (!$resultat) { die ('Unable to update: error code is ' . mysqli_connect_errno() . ' described as '. >mysqli_connect_error()); }

它会返回'无法更新:错误代码是0描述为',即没有错误代码,无错误消息。事实上,我错误的地方在于错误拼写的行名(当然,这里不能注意到 - 错过了一个尾随字母)。

结论:mysqli_query()可以在没有适当的错误代码/消息的情况下生成错误。

我希望这可以帮助一些。

+0

**你的代码很容易受到SQL注入**你真的* *应该使用的方法制得的语句(http://stackoverflow.com/ a/60496/623041),将您的变量作为参数传递到其中,而这些参数不针对SQL进行评估。如果你不知道我在说什么,或者如何解决它,请阅读[Bobby Tables](http://stackoverflow.com/q/332365/623041)的故事。 – eggyal

+0

我会仔细看看。谢谢。 –

回答

1

您正在使用错误的功能。

由于在手动条目mysqli_connect_errno()说:

Returns the last error code number from the last call to mysqli_connect() .

你想mysqli_errno()mysqli_error()

if (!$resultat) die (
    'Unable to update: error code is ' 
    . mysqli_errno($link) . ' described as ' . mysqli_error($link) 
); 
+0

感谢您的宝贵意见。 –

0

使用的sprintf,而不是直接使用可变进查询字符串。

$sql =sprintf("UPDATE Adherents SET Prenom= %s, Civilite=%s WHERE No_Adherent=%s",$_POST[tfPrenom], $_POST[mdCivil], $LeNumero); 

PHP将用变量值替换%s。

请尝试检测错误如下:

<?php 
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 

    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    if (!mysqli_query($link, "update ...SET a=1")) { 
     printf("Errormessage: %s\n", mysqli_error($link)); 
    } 

    /* close connection */ 
    mysqli_close($link); 
    ?> 
+0

感谢您的宝贵意见 –