刚刚学习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();
提前感谢您可以放下任何光线。
答案 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();
?>