我正在使用 mysqli 类和准备好的语句在 PHP 中编写数据库处理程序类。我试图打印结果。它并没有立即起作用,所以我决定进行一些调试。我尝试使用 num_rows() 方法从 mysqli_statement 类,但它一直返回0。我决定编写一小部分测试代码以使其更简单,以便我可以看到出了什么问题。然后我能够返回我想要的数据,但是 num_rows() 即使它实际上正在选择和检索一些数据,方法仍然返回 0。这是代码:

$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
  die('connection failed');
}

$statement = $mysqli->stmt_init();

$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
    $statement->execute();
    $statement->bind_result($name);
    $statement->fetch();
    $statement->store_result();
    echo $statement->num_rows();
    echo $name; 
}
else
{
    echo 'prepare statement failed';
    exit();
}

所以是的,预期结果是:

1name

实际结果是:

0name

谁能告诉我这是为什么?

有帮助吗?

解决方案

我想知道 num_rows() 是否相对于当前结果集进行报告。在获取数据之前尝试捕获 num_rows() 。例如

if($statement->prepare($query))
{
    $statement->execute();
    $statement->store_result();
    echo $statement->num_rows();
    $statement->bind_result($name);
    $statement->fetch();
    echo $name; 
}

那有什么作用吗?

其他提示

num_rows 不是一个方法,它是一个属性。

您似乎没有声明 $name。

另外,尝试删除bind_result()和fetch(),这样它的内容如下:

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top