PHP MySQLI结果num_rows返回null

时间:2014-11-07 08:18:12

标签: php mysqli

为什么num_rows会返回null?它应该总是返回一个数字,表示结果集中的确切行数。

以下代码为num_rows返回null:

<?php
include_once 'includes/psl-config.php';   // host, user, password, database
$db = new PDO('mysql:host='.HOST.';dbname='.DATABASE.';charset=utf8', USER, PASSWORD,
                array(PDO::ATTR_EMULATE_PREPARES => false, 
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

if ($res = $db->query("select 'Hello world!'")){
    if (is_null($res)){
        echo "Result is null<br>";
    }
    if (is_null($res->num_rows)){
        echo "Num rows is null<br>";
    } else {
        echo "Rows returned: ".$res->num_rows."<br>";
    }
    while ($row = $res->fetch_row){
        echo "Text returned = $row[0]<br>";
    }
    echo "Done";

} else {
    echo "SQL error";
}

结果页面显示“Num_rows为空”。

这很简单,我必须遗漏一些东西!

  • 手册中说num_rows总是返回一个int。
  • 我使用mysqli查询,默认情况下存储结果。我不需要使用store_result。
  • 结果不为空。

2 个答案:

答案 0 :(得分:1)

您正在使用PDO。所以它应该是

$res->rowCount()

而不是

$res->num_rows

答案 1 :(得分:0)

由于您使用的是PDO而不是MySQLi,num_rows不适用。话虽如此,一般来说,我发现rowCount()在MySQL方面是可靠的,但是,正如手册中所述,您不应该依赖rowCount()关于SELECT语句的内容:

  

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。

建议使用COUNT() sql语句,以获得跨数据库平台的最高可靠性:

$db->query("SELECT COUNT(*) FROM table_name");