捕获 mysql_query 错误

Posted

技术标签:

【中文标题】捕获 mysql_query 错误【英文标题】:Catching mysql_query error 【发布时间】:2011-02-16 16:30:55 【问题描述】:

我试图阻止 mysql_query 错误输出到我的表单中。目前如果没有找到位置,我会收到错误

“警告:mysql_result() [function.mysql-result]:无法跳转到 MySQL 结果索引 11 上的第 0 行”

我试图捕捉这个错误,而是将 $location 变量分配给未找到。我尝试这样做的代码如下,我做错了什么?

谢谢!

$query3 = "SELECT `location` FROM location WHERE vin = '$vin' LIMIT 1";
$result3 = mysql_query($query3);

if (!mysql_result($result3,0)) 
    $location = "Not found";
 else $location = mysql_result($result3,0,0);

【问题讨论】:

【参考方案1】:

mysql_result() 通常不应使用。您最好使用以下内容:

$result3 = mysql_query($query3) or die(mysql_error());

if (mysql_numrows($result3) == 0) then
   $location = "not found";
 else 
   $row = mysql_fetch_array($result3);
   $location = $row[0];

您的错误是由于查询未返回任何行导致的 - 例如没有匹配的。然后,您尝试检索该结果集第一行中的第一个字段,该行不存在。使用mysql_numrows() 检查返回的行数更安全,因为无论查询什么都没有找到或找到数十亿行,这都有效。

【讨论】:

这应该是解决这个问题的正确方法。不要隐藏你的问题,而是解决它们;) @Marc 您能否在 php 文档中提供指向 mysql_numrows 的链接?【参考方案2】:

您应该研究如何在 php ini 中设置错误和警告级别 - 通常您希望 prod 上的输出尽可能少。

http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

但是,在这里,会产生该错误的代码是:

$result3 = mysql_query($query3);

这就是你应该写你的 if 或“or die”语句的那一行:

$result3 = mysql_query($query3)or die($location = "not found");

【讨论】:

mysql_query() 在查询失败时返回 FALSE,而不是在返回零行时返回。【参考方案3】:

您应该考虑使用 OOP;使用数据库类来处理与数据库的交互。

但是,基本上你想在尝试返回结果之前检查是否有任何行。

尝试在“if”语句中检查“mysql_num_rows”:

if (!mysql_num_rows($result3)) 

【讨论】:

【参考方案4】:

首先,你可以添加@:

if (!@mysql_result($result3,0)) 
    $location = "Not found";
 else $location = mysql_result($result3,0,0);

其次,您可以在mysql_result调用之前检查mysql_num_rows(result3)

【讨论】:

@Álvaro G. Vicario - 是的。但是编码员应该知道他正在编码的语言的所有特征。我认为第二种变体也更可取。 请不要推荐运营商@。它会立即给代码带来难闻的气味。【参考方案5】:

如果什么都没找到,Mysql_query 返回 false 这么简单:

$result3 = mysql_query($query3);

if (mysql_affected_rows($result3) == 0) 
    $location = "Not found";
 else  $location = mysql_result($result3,0,0);

应该这样做。

【讨论】:

在这种情况下,mysql_query() 应该在 MySQL 服务器崩溃、连接断开或类似情况时返回 FALSE。不返回任何行的查询不是错误。 OP报错是mysql_result命令导致的,因为上面的mysql_query没有返回结果。我的回答是针对原因而不是针对症状。 过失,我不明白你的评论。 mysql_query 仅在 sql 语句导致错误时才返回 false。如果行数为 0,则不会。我正在根据此更正我的答案。 来自 php 文档:“通过与 link_identifier 关联的最后一个 INSERT、UPDATE、REPLACE 或 DELETE 查询获取受影响的行数。

以上是关于捕获 mysql_query 错误的主要内容,如果未能解决你的问题,请参考以下文章

lua中怎么捕获错误异常信息

前端捕获异常技巧总结

lua中怎么捕获错误异常信息

swift没有捕获firebase firestore权限错误,请尝试捕获

捕获所有错误 psql 函数异常

错误:变量“无法隐式捕获,因为未指定默认捕获模式”