2011-02-16 161 views
5

我想阻止mysql_query错误输出到我的窗体上。目前,如果没有位置找到,我收到错误捕捉mysql_query错误

“警告:mysql_result()[function.mysql-结果]:无法跳转到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); 

回答

6

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()检查返回的行的数量更安全,因为无论查询什么都没找到或bajillion行,这可以工作。

+0

这应该是解决这个问题的正确方法。不要隐藏你的问题,而是解决它们) – 2011-02-16 16:38:38

+0

工作很好,谢谢! – cds5059 2011-02-16 16:46:27

0

首先,你可以添加@:

if ([email protected]_result($result3,0)) { 
    $location = "Not found"; 
} else $location = mysql_result($result3,0,0); 

其次,你可以mysql_num_rows(result3)mysql_result电话查询。

+0

使用`@`运算符隐藏错误通常是一个坏主意。 – 2011-02-16 16:42:52

+0

@ÁlvaroG. Vicario - 是的。但编码员应该知道他正在编码的语言的所有特征。我认为第二个变体也是可取的。 – 2011-02-16 17:08:15

0

你应该看看如何在php ini中设置你的错误和警告级别 - 通常你想在产品上尽可能少输出。

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

然而,在这里,这将产生错误代码是:

$result3 = mysql_query($query3); 

这是你周围应写你如果还是“还是死亡”的语句行:

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

如果找不到任何内容,Mysql_query返回false:

$result3 = mysql_query($query3); 

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

应该这样做。

0

你应该看看使用OOP;使用数据库类来处理与数据库的交互。

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

尝试在“如果”语句“mysql_num_rows”检查:

if (!mysql_num_rows($result3)) {