2010-03-10 175 views
9

有时会出现mysql_query()无法插入数据,我不知道它。所以,问题是我怎么知道它何时发生?如果mysql_query()失败,该怎么办?

+3

我不认为这个问题值得downvotes。这是基本的,但它有相当的措辞和迄今为止的答案是真诚的。你需要将Pod Six的面部剪切掉。 – Drew 2010-03-10 05:55:01

回答

0

你必须分析你的sql。你逃脱了你的参数吗?听起来像这可能是问题。你可能会粘贴你的SQL,所以我们可以帮助你。

用于显示错误,您可以例如。

$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

+4

虽然这是一个很好的答案,以确定是什么导致了失败,我不认为这是回答OP的要求。我认为OP想知道如何确定它何时失败,而不是可能导致失败的原因。 – 2010-03-10 04:44:37

+0

好点chris – 2010-03-10 04:47:33

-2

也许你可以在PHP中检查LAST_INSERT_ID()(mysql_insert_id())。假设你的表有auto_increment列。

+0

如果mysql_insert_id()返回0,并且表中有一个auto_increment列,那么最后一个INSERT失败。但我更喜欢mysql_error。 – 2010-03-10 04:51:39

+0

-1,如果插入失败,last_insert_id()将向您显示来自先前插入(可能是另一个)表中的插入编号。无论如何没有意义。 – Johan 2011-05-31 17:27:33

3

您可以使用mysql_error php.net/mysql_error来获得更好的解释,然后将其显示或记录到文件中。

9

引用的mysql_query的文档页面:

对于SELECTSHOWDESCRIBEEXPLAIN 等语句返回的结果集 ,mysql_query()返回 resource成功,或FALSE上 错误。

对于其它类型的SQL语句, INSERTUPDATEDELETEDROP等, mysql_query()回报TRUE上 成功或FALSE上的错误。

因此,要检测是否有一直错误或没有,你有你的调用的返回值进行测试,以mysql_query

$result = mysql_query('...'); 
if ($result === false) { 
    // And error has occured while executing 
    // the SQL query 
} 


那么,你该怎么办?

  • 嗯,首先,你可以记录错误到一个文件,你可以稍后
  • 还可以显示一个友好的错误消息的用户
    • 即某种“哎呀,发生错误页”。

记住,虽然:用户并不需要知道(而不会明白)的技术错误信息 - 这样不显示它。

+0

如果你的查询失败,你一定要使用mysql_error()。这并不总是可怕的帮助,特别是如果你有一个大的查询。但它可能会帮助您诊断问题的可能性。 – 2010-03-10 14:48:55

1

建议作出的请求mysql_query检测故障并记录查询加上mysql_error包装某处

1

如果您使用的是明智的客户端库,当一个SQL命令失败,它会抛出一个异常,你可以检查错误代码以编程方式知道该怎么做。

如果你没有代码处理特定的错误路径,你应该运行一个标准的错误处理程序,将错误,堆栈跟踪和其他一些调试信息记录到日志中。

0

如果错误的原因是死锁,您可能需要重试。

3

一张支票,我通常做的是像例如

$result = mysql_query($query); 
if (!empty($error = mysql_error())) 
{ 
    echo 'Mysql error '. $error ."<br />\n"; 
} 
else 
{ 
    // the query ran successfully 
} 

这是任何类型的查询

的一个很好的检查
+1

很好用,但是在生产中你不需要这么做,因为SQL注入的人群会知道如何更容易地利用你的弱点。 – Johan 2011-05-31 17:25:31

+0

是的,你是对的。 – cleanunicorn 2011-07-18 13:53:37

相关问题