Php 捕捉mysql\u查询错误

Php 捕捉mysql\u查询错误,php,mysql,Php,Mysql,我试图阻止mysql_查询错误被输出到我的表单上。当前如果没有找到位置,我将收到错误消息 “警告:mysql_result()[function.mysql result]:无法跳转到mysql结果索引11上的第0行” 我试图捕获此错误,并将$location变量指定给not found。下面是我的代码,我做错了什么 谢谢 $query3 = "SELECT `location` FROM location WHERE vin = '$vin' LIMIT 1"; $result3 = mysq

我试图阻止mysql_查询错误被输出到我的表单上。当前如果没有找到位置,我将收到错误消息

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

我试图捕获此错误,并将$location变量指定给not found。下面是我的代码,我做错了什么

谢谢

$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);
mysql\u 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\u numrows()
检查返回的行数更安全,因为无论查询是否未找到任何行或找到大量行,都可以这样做。

首先,您可以添加@:

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

其次,您可以在调用
mysql\u result
之前检查
mysql\u num\u rows(result3)

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

但是,在这里,将生成该错误的代码是:

$result3 = mysql_query($query3);
这就是你应该写下的关于“如果”或“或者“死亡”的陈述:

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

如果未找到任何内容,则Mysql\u查询返回false

$result3 = mysql_query($query3);

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

应该这样做。

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

但是,在尝试返回结果之前,基本上需要检查是否有行

尝试在“if”语句中使用“mysql\u num\u rows”进行检查:

if (!mysql_num_rows($result3)) {

这应该是解决这个问题的正确方法。不要隐藏你的问题,而是解决它们;)@Marc您能在php文档中提供一个指向
mysql\u numrows
的链接吗?
mysql\u query()
在查询失败时返回FALSE,而不是在返回零行时。在这种情况下,
mysql\u query()
在mysql服务器崩溃、连接中断或类似情况下应返回FALSE。不返回行的查询不是错误。OP报告的错误是由mysql\u result命令引起的,因为上面的mysql\u查询没有返回任何结果。我的回答是关于原因而不是症状。Méa culpa,我不理解你的评论。仅当sql语句导致错误时,mysql\u查询才会返回false。如果行计数为0,则不是。基于此,我正在更正我的答案。从php文档中:“获取与链接_标识符关联的最后一次插入、更新、替换或删除查询所影响的行数。”@lvaro G.Vicario-是。但是编码者应该知道他正在编码的语言的所有特性。我认为第二种变体也更可取。请不要推荐操作员
@
。它会立即给代码带来一股臭味。