PHP mysql_query没有返回false

时间:2009-06-06 03:06:35

标签: php mysql

刚刚学习PHP,我在理解mysql_query时遇到了一些麻烦。我的理解是,如果找不到记录,mysql_query应该返回FALSE。然而,似乎它总是返回true,因为“FOUND!”总是结果:

$q = "SELECT * FROM users WHERE username = 'doesnotexist'";

$r = mysql_query($q);

if (!$q) {
    echo "<p>NOT FOUND!</p>";
} else {
    echo "<p>FOUND!</p>";
}

mysql_close();

提前感谢您可以放下任何光线。

6 个答案:

答案 0 :(得分:13)

如果有错误,

mysql_query会返回false,如果没有找到结果,则返回false。来自文档:

  

用于SELECT,SHOW,DESCRIBE,EXPLAIN   和其他声明返回   结果集,mysql_query()返回一个   成功的资源,或FALSE   错误。

     

对于其他类型的SQL语句,   INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE   错误时为FALSE。

     

mysql_query()也会失败   如果用户没有,则返回FALSE   访问表的权限   由查询引用。

如果您想查看查询是否返回了结果,请使用mysql_num_rows()。请参阅文档:

  

使用mysql_num_rows()了解具体方法   为SELECT返回了许多行   声明或mysql_affected_rows()到   找出受影响的行数   通过DELETE,INSERT,REPLACE或   更新声明。

答案 1 :(得分:3)

您正在检查'$ q'变量(您的sql语句)而不是'$ r'变量(mysql结果)

答案 2 :(得分:2)

if (empty($r)) {
        echo "<p>NOT FOUND!</p>";
} else {
        echo "<p>FOUND!</p>";
}

以下内容被认为是空的:

"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

答案 3 :(得分:1)

好的,我已经找到了答案。

这是用于更新数据库的版本,该数据库告诉您记录是否有效。

$updatequery = "update `mydb` set `userid` = '$arr[0]', `name` = '$arr[1]' where `age` = '$arr[2]'";

$updatequeryresult= mysql_query($updatequery);

$howmanyupdatedrecords = mysql_affected_rows();

if ($howmanyupdatedrecords == 0) {
echo("The update didn't update any records as no one matched an age of " .$arr[2]");
}

这将迭代DB更新所有具有指定年龄的人,如果DB中不存在年龄,将显示一条消息,显示不存在的年龄。另外需要注意的是,即使mysql查询与记录匹配,如果数据已经与更新的数据匹配,它也不会更新记录。这导致脚本返回“没有人匹配年龄”,即使有人匹配。只能将其归因于mysql中的错误。我告诉MySQL更新信息,我不明白为什么它应该采取它自己不打扰做我告诉它。 ;)

答案 4 :(得分:0)

我认为您的“if (!$q)”应为“if (!$r)”。

答案 5 :(得分:0)

如果这不起作用,试试这个:

<?php
$q = "SELECT * FROM users WHERE username = 'doesnotexist'";
$r = mysql_query($q);
if (!mysql_num_rows($r) >= 1) {
        echo "<p>NOT FOUND!</p>";
} else {
        echo "<p>FOUND!</p>";
}
mysql_close();
?>