Mysqli准备了多个参数的语句num_rows

时间:2011-02-25 14:03:56

标签: php mysql mysqli prepared-statement

我有以下脚本:

<?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个param绑定到语句,num_rows就会停止工作。

p.s:在完整脚本中,有理由在此使用call_user_func_array,而不使用call_user_func_array会得到相同的结果。

1 个答案:

答案 0 :(得分:1)

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