我正在寻找检查查看是否在查询中返回任何结果的最佳方法。我觉得我经常写这部分代码,有时候会出错,有时候我也没有。
例如,我运行此查询以检查在将新的用户名插入数据库之前是否存在用户名。
$result = mysql_query("SELECT * FROM ...");
然后我想查看是否有任何结果返回。这是我做的一种方式:
if (!$result) { PERFORM ACTION }
如果第一种方法不起作用,那么有时会这样:
if (mysql_num_rows($result)==0) { PERFORM ACTION }
然后我甚至看到我可以在前几天这样做:
list($total) = mysql_fetch_row($result);
if ($total==0) { PERFORM ACTION }
这样做的最佳方式是什么?
答案 0 :(得分:125)
if (mysql_num_rows($result)==0) { PERFORM ACTION }
对于PHP 5和7及更高版本,请使用mysqli:
if (mysqli_num_rows($result)==0) { PERFORM ACTION }
这得到了我的投票。
OP假设查询没有返回任何错误,所以这应该是
之一答案 1 :(得分:12)
一种方法是检查mysql_num_rows
返回的内容。最小的完整示例如下:
if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) {
// there are results in $result
} else {
// no results
}
但是建议您检查mysql_query
的返回值,并在false
(由错误引起)的情况下正确处理它;可能还会调用mysql_error
并在某处记录错误。
答案 2 :(得分:4)
每当我们进行查询以获取某些数据时,它都会作为对象返回。然后我们大多数人将它转换为数组,以便轻松地遍历行。在php“empty()”函数用于检查数组是否为空,即它是否没有数据。因此,我们可以通过这样做来检查返回的查询数组表示是否为空
if(!empty($result)){
//DO STUFF
}
答案 3 :(得分:3)
在处理之前测试结果变量的TYPE更合乎逻辑? 它是'boolean'或'resource'类型。当您使用boolean for参数和mysqli_num_rows时,将生成警告,因为该函数需要资源。
$result = mysqli_query($dbs, $sql);
if(gettype($result)=='boolean'){ // test for boolean
if($result){ // returned TRUE, e.g. in case of a DELETE sql
echo "SQL succeeded";
} else { // returned FALSE
echo "Error: " . mysqli_error($dbs);
}
} else { // must be a resource
if(mysqli_num_rows($result)){
// process the data
}
mysqli_free_result($result);
}
答案 4 :(得分:2)
在上面的所有选项中,我会使用
if (mysql_num_rows($result)==0) { PERFORM ACTION }
检查结果如下
if (!$result) { PERFORM ACTION }
如果发生错误,如果有效地发生mysql_error,那么你就可以输入一个重复的用户名......
答案 5 :(得分:1)
使用带有mysql_fetch_row
的那个,因为“对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。 “
答案 6 :(得分:0)
通常我使用===
(triple equals)和__LINE__
,__CLASS__
来查找代码中的错误:
$query=mysql_query('SELECT champ FROM table')
or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error());
mysql_close();
if(mysql_num_rows($query)===0)
{
PERFORM ACTION;
}
else
{
while($r=mysql_fetch_row($query))
{
PERFORM ACTION;
}
}
答案 7 :(得分:0)
$result = $mysqli->query($query);
if($result){
perform action
}
这就是我这样做的原因,你也可以在那里扔一个骰子......
答案 8 :(得分:0)
如果$result
无效,您仍希望执行操作:
if(!mysql_num_rows($result))
// Do stuff
这将考虑0
以及false
失败时返回的mysql_num_rows()
。
答案 9 :(得分:0)
mysqli_fetch_array()
会返回NULL
。
程序风格:
if ( ! $row = mysqli_fetch_array( $result ) ) {
... no result ...
}
else {
... get the first result in $row ...
}
以面向对象的风格:
if ( ! $row = $result->fetch_array() ) {
...
}
else {
... get the first result in $row ...
}
答案 10 :(得分:0)
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
}
答案 11 :(得分:-1)
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
这样一来,如果结果是肯定的,你会检查并采取行动(你的数据库中有一条与你的查询匹配的记录),另一种方式(== 0)你在没有给出结果的情况下执行了这个动作。
答案 12 :(得分:-2)
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }