检查PHP结果是否返回的最好方法是什么?
我正在寻找最好的方法来检查查询是否有任何结果返回。 我感觉好像我写了这么多的代码,有时我会得到错误,有时我不会。
例如,我运行这个查询来检查用户名是否存在,然后再向数据库中插入一个用户名。
$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 (mysql_num_rows($result)==0) { PERFORM ACTION }
这得到我的投票。
OP假设查询没有返回任何错误,所以这应该是其中一种方式
一种方法是检查mysql_num_rows
返回的内容。 一个最小的完整例子如下:
if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { // there are results in $result } else { // no results }
但build议您检查mysql_query
的返回值,并在false
的情况下处理它(这可能是由错误引起的)。 可能也通过调用mysql_error
并logging错误的地方。
每当我们做查询来获取一些数据,它就会作为一个对象返回。 然后,我们大多数人将其转换为数组,以便轻松地循环访问行。 在PHP“空()”函数是用来检查数组是否是空的,即如果它没有数据。 所以我们可以通过这样做来检查返回的查询数组表示是否为空
if(!empty($result)){ //DO STUFF }
在处理之前testing结果variables的types是什么更合乎逻辑? 它是'布尔'或'资源'types的。 当您使用mysqli_num_rows参数的布尔值时,将会生成一个警告,因为该函数需要一个资源。
$result = mysqli_query($dbs, $sql); if(gettype($result)=='boolean'){ // test for boolean if($result){ // returned TRUE, eg 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); }
以上所有的选项我会用
if (mysql_num_rows($result)==0) { PERFORM ACTION }
检查下面的结果
if (!$result) { PERFORM ACTION }
这将是真实的,如果一个mysql_error发生如此有效,如果发生错误,你可以input一个重复的用户名…
因为“对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回resultset的语句,mysql_query()在成功时返回资源,或者在错误时返回FALSE,所以使用mysql_fetch_row
。
对于其他types的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功返回TRUE,错误返回FALSE。 “
通常我使用===
( triple equals )和__CLASS__
, __CLASS__
在我的代码中find错误:
$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; } }
$result = $mysqli->query($query); if($result){ perform action }
这是我怎么做的,你也可以在那里扔一个死亡…
如果您仍想在$result
无效的情况下执行操作:
if(!mysql_num_rows($result)) // Do stuff
这将解释为0
,失败时由mysql_num_rows()
返回的false
。
如果没有行, 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 ... }
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
这样,如果结果是肯定的(你在你的数据库中有一个匹配你的查询的logging),那么你检查并采取行动,另一种方式(== 0),当没有给出结果时你执行了这个动作。
if (mysql_num_rows($result)>0) { PERFORM ACTION } if ($result) { PERFORM ACTION }