【问题标题】:Mysqli prepared statement num_rows with multiple parameters带有多个参数的 Mysqli 准备语句 num_rows
【发布时间】:2011-02-25 14:03:56
【问题描述】:

我有以下脚本:

<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');

$statement = $mysqli->stmt_init();

$query = 'SELECT * FROM table WHERE id = ? AND active = 1';
$statement->prepare($query);
$parameters = array('i');
$inputParameters = array(10);
foreach ($inputParameters as $param) {
    $parameters[] =& $param;
}
call_user_func_array(array($statement, 'bind_param'), $parameters);
$statement->execute();
$statement->store_result();
echo $statement->num_rows;
?>

返回正确的行数。

但是当我将脚本更改为:

<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');

$statement = $mysqli->stmt_init();

$query = 'SELECT * FROM table WHERE id = ? AND active = ?';
$statement->prepare($query);
$parameters = array('ii');
$inputParameters = array(10, 1);
foreach ($inputParameters as $param) {
    $parameters[] =& $param;
}
call_user_func_array(array($statement, 'bind_param'), $parameters);
$statement->execute();
$statement->store_result();
echo $statement->num_rows;
?>

它返回 0。有人对此有解释吗?在我看来,一旦您将超过 1 个参数绑定到语句,num_rows 就会停止工作。

p.s:在完整的脚本中,这里使用 call_user_func_array 是有原因的,而不是使用 call_user_func_array 会得到相同的结果。

【问题讨论】:

    标签: php mysql mysqli prepared-statement


    【解决方案1】:

    经过大量调试,我找到了答案:$parameters 在第二个代码中将是array('ii', 1, 1)。这是因为那里使用的参考。将 foreach ($inputParameters as $param) { 更改为 foreach ($inputParameters as &amp;$param) { 解决了问题

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多