2011-02-25 56 views
0

我有以下脚本:mysqli的编制声明NUM_ROWS多参数

<?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给出了相同的结果。

回答

1

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