检查MySQL结果是否以PHP返回的最佳方法?
我正在寻找检查和查看查询中是否返回任何结果的最佳方法。我觉得我经常写这部分代码,有时会出错,有时不会 例如,在将新用户名插入数据库之前,我运行此查询检查用户名是否存在检查MySQL结果是否以PHP返回的最佳方法?,php,mysql,Php,Mysql,我正在寻找检查和查看查询中是否返回任何结果的最佳方法。我觉得我经常写这部分代码,有时会出错,有时不会 例如,在将新用户名插入数据库之前,我运行此查询检查用户名是否存在 $result = mysql_query("SELECT * FROM ..."); 然后我想检查一下是否返回了任何结果。我有一种方法: if (!$result) { PERFORM ACTION } 如果第一种方法不起作用,那么有时会: if (mysql_num_rows($result)==0) { PERFORM
$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 }
最好的方法是什么?一种方法是检查返回的内容。下面是一个最简单完整的示例:
if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) {
// there are results in $result
} else {
// no results
}
但建议您检查的返回值,如果返回值为false
(这可能是由错误引起的),请正确处理该值;可能还需要调用并记录某个地方的错误
if (mysql_num_rows($result)==0) { PERFORM ACTION }
对于PHP5和PHP7及以上版本,请使用mysqli:
if (mysqli_num_rows($result)==0) { PERFORM ACTION }
这是我的选票
OP假设查询没有返回任何错误,因此这应该是使用带有
mysql\u fetch\u row
的方法之一,因为“对于返回resultset的SELECT、SHOW、description、EXPLAIN和其他语句,mysql\u query()在成功时返回资源,在错误时返回FALSE
对于其他类型的SQL语句,如INSERT、UPDATE、DELETE、DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。”以上所有选项中我都会使用
if(mysql_num_rows($result)==0){PERFORM ACTION}
对照下面的结果进行检查
if (!$result) { PERFORM ACTION }
如果mysql\u错误发生得非常有效,则会出现这种情况。如果发生错误,则可以输入重复的用户名 通常我使用
==
()和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
$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;
}
}
每当我们进行查询以获取一些数据时,数据都会作为对象返回。然后,我们大多数人将其转换为数组,以便轻松地在行中循环。在php中,“empty()”函数用于检查数组是否为空,即数组中是否没有数据。所以我们可以通过这样做来检查查询返回的数组表示形式是否为空
if(!empty($result)){
//DO STUFF
}
还有什么比在处理前测试结果变量的类型更符合逻辑?
它属于“布尔”或“资源”类型。当您对mysqli_num_行使用boolean for参数时,将生成一条警告,因为函数需要一个资源
$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);
}
我就是这样做的,如果$result
无效,如果您仍想执行操作,您还可以在那里用骰子扔一个else…:
if(!mysql_num_rows($result))
// Do stuff
这将解释失败时由mysql\u num\u rows()
返回的0
和false
。mysqli\u fetch\u 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 ...
}
@如果sql失败,$result不是有效的mysql结果资源,mysql_num_rows可以做什么?是的,但它几乎不值得投票否决!?这仍然是检查O/P问题的有效方法:我正在寻找检查并查看查询中是否返回任何结果的最佳方法。Racertim询问如何检查行数,而不是SQL是否失败,因此这是一个合法的答案。如果$result是无效的更新,mysql\u num\u rows将返回false:使用mysqli\u num\u rows($result)==0
因为mysql\u num\u rows($result)不适用于php版本>7(我选中了该版本)。不可能,mysql\u fetch\u row将获取结果。考虑到SELECT,他要求知道是否返回了结果。在本例中,假设查询没有产生错误。如果查询中没有错误,那么第一个测试就没有意义。如果是“SELECT*”,则第二种方法是最好的方法。只有在使用SELECT COUNT(*)或其他聚合函数时,最后一种方法才有用。但出于理智的考虑,请使用PDO:-)[对内容进行投票,但想提及这一点。]次要风格nit:我讨厌在if中看到“=”。与“==”太相似。如果在if
之前完成作业,则更容易阅读。(在我的职业生涯中,我花了很多时间调试别人的代码…)不,不要使用empty
。许多其他stackoverflow帖子都提到这样做会导致错误,在php中,当值可能是0
或'0'
,这些值等于false。您需要测试$result是否(不是)具体地、相同地,false
。重要提示:如果(result!=false)
,出于同样的原因,也是错误的。如果($result!==false)
,则正确的代码为。作为有效的、清除的选项进行升级表决。然而在实践中,同样的结果是通过更简单的代码实现的:if($result==false)
。注意:这必须是==
而不是=
。这保证您只测试“boolean false”。相反的测试是如果($result!==false)
。
if ( ! $row = $result->fetch_array() ) {
...
}
else {
... get the first result in $row ...
}
$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";
}