如果mysql_query()失败,该怎么办?

时间:2010-03-10 04:42:21

标签: php mysql security

有时碰巧mysql_query()无法插入数据而我不知道它。所以,问题是我怎么知道它何时发生?

9 个答案:

答案 0 :(得分: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
}


那么,你能做什么?

  • 嗯,首先,您可以将错误记录到文件中,以后可以进行分析
  • 您可以向用户显示一条漂亮的错误消息
    • 即。某种“ oops,一个错误的页面”。

请记住:用户不需要知道(并且不会理解)技术错误消息 - 所以不要显示它。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

我通常做的一项检查就像示例中的

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

这是对任何类型的查询的良好检查

答案 3 :(得分:1)

建议为mysql_query创建一个检测失败的包装器,并在某处记录查询和mysql_error

答案 4 :(得分:1)

如果您正在使用敏感的客户端库,它将在SQL命令失败时抛出异常,您可以通过编程方式检查错误代码以了解要执行的操作。

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

答案 5 :(得分:0)

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

显示错误,您可以例如。

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

答案 6 :(得分:0)

如果错误原因是死锁,您可能想再试一次。

答案 7 :(得分:0)

您可以在插入/更新/删除查询后立即执行此查询,检查MySQL插入/更新/删除的行数。

SELECT ROW_COUNT() as rows_affected

如果返回0,则插入失败。如果它返回1或更多,则表示您已成功。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

答案 8 :(得分:-2)

可能你可以检查LAST_INSERT_ID()(PHP中的mysql_insert_id())。前提是您的表具有auto_increment列。