【问题标题】:PHP & MySQL, what's returned when the query yields no rows?PHP & MySQL,当查询没有产生行时返回什么?
【发布时间】:2011-12-04 17:43:48
【问题描述】:

我对 MySQL 的 PHP 接口有些困惑。 mysql_query(用于执行命令和查询)的文档说明了返回值:

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 等语句返回 结果集,mysql_query() 成功返回资源,或 FALSE 错误。

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

返回的结果资源应该传递给mysql_fetch_array(), 和其他处理结果表的函数,以访问 返回数据。

使用 mysql_num_rows() 来找出返回的行数 SELECT 语句或 mysql_affected_rows() 找出有多少行 受到 DELETE、INSERT、REPLACE 或 UPDATE 语句的影响。

如果用户不这样做,mysql_query() 也会失败并返回 FALSE 有权访问查询引用的表。

我知道,假设我在 {SELECT, SHOW, DESCRIBE, EXPLAIN} 集中执行了一个命令,我可以调用 mysql_num_rows 来获取查询返回的行数。

除此之外......如果该集合中的查询成功执行(数据库方面)但没有返回结果行会发生什么? mysql_query 在这种情况下返回真还是假(即这是一个失败条件)?使用此界面检查成功查询的“无结果”可能性的最佳方法是什么?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这属于文档第一部分的情况:

    对于 SELECT、SHOW、DESCRIBE、EXPLAIN 等语句返回 结果集,mysql_query() 成功返回资源,或 FALSE 错误。

    不返回结果行的查询既不会返回true,也不会返回false,而是一个资源对象。

    但是,资源对象将没有行,即,mysql_num_rows() 将返回 0,而对 mysql_fetch_* 的第一次调用将返回 FALSE。有多种方法可以检测到这种情况,但调用 mysql_num_rows() 可能是最简单的方法之一。

    【讨论】:

    • @Johan:它不会返回true
    【解决方案2】:

    不确定它的最佳方式,但我通常使用 mysql_num_rows 来检查结果资源以及是否

    $countt = mysql_num_rows($resource);
    if($count>0)
    {
    //do further
    }
    

    在这种情况下是这样的。

    【讨论】:

      【解决方案3】:

      看看它返回了什么, 使用

      $result = mysql_query("SELECT * FROM  customers WHERE phone = $phoneNum", $link);
      		
      		$count = mysql_num_rows($result);
      
      					echo $count;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        相关资源
        最近更新 更多