3 回答
TA贡献1801条经验 获得超16个赞
这个答案已经过时了。请在较新的PHP版本(如Stacky回答)中使用传播运算符。
从php docu:
将mysqli_stmt_bind_param()与call_user_func_array()结合使用时必须小心。注意,mysqli_stmt_bind_param()要求参数通过引用传递,而call_user_func_array()可以接受可以表示引用或值的变量列表作为参数。
在mysqli-stmt.bind-param页面上,您有不同的解决方案:
例如:
call_user_func_array(array($stmt, 'bind_param'), refValues($params));
function refValues($arr){
if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+
{
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
return $arr;
}
TA贡献1797条经验 获得超6个赞
在PHP 5.6中引入的,您可以使用...运算符(“扩展运算符”)以较少的麻烦来实现相同的结果:
//object-oriented
$sql_stmt->bind_param($param_type, ...$params);
//procedural
mysqli_stmt_bind_param($sql_stmt, $param_type, ...$params);
TA贡献1799条经验 获得超6个赞
Dunno为什么在代码中使用单词“ PDO”,但这是其中唯一正确的单词。使用PDO,面对mysqli准备好的语句不会遇到问题:
$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)";
$params = array(1,"2","3","4");
$stmt = $pdo->prepare($query);
$stmt->execute($params);
只需看一下这段简洁的代码,然后将其与mysqli准备好的语句与所需的代码进行比较即可。
添加回答
举报