捕获 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 错误的主要内容,如果未能解决你的问题,请参考以下文章