关于PHP预备语句
我正在寻找一个简单的函数来执行预先准备好的语句。现在我遇到了一个问题:关于PHP预备语句,php,mysqli,prepared-statement,pass-by-reference,Php,Mysqli,Prepared Statement,Pass By Reference,我正在寻找一个简单的函数来执行预先准备好的语句。现在我遇到了一个问题: class mysqli_extend extends \mysqli{ function pquery(){ $input = func_get_args(); if ($stmt = parent::prepare($input[0])){ $input = array_slice($input,1); $index = count($input);
class mysqli_extend extends \mysqli{
function pquery(){
$input = func_get_args();
if ($stmt = parent::prepare($input[0])){
$input = array_slice($input,1);
$index = count($input);
if ($index){ //non-0 == true, 0 == false
$typestr = '';
while ($ele = current($input)){
$type = gettype($ele);
switch($type) {
case "integer": $typestr .= 'i'; break;
case "double": $typestr .= 'd'; break;
case "string": $typestr .= 's'; break;
default: $typestr .= 'b'; break;
}
next($input);
}
array_unshift($input,$typestr);
//output to console checking array content
while ($ele = current($input)){
echo key($input) . ":" . $ele . "\t";
next($input);
}
call_user_func_array(array($stmt,'bind_Param'),$input);
}
$stmt->execute();
}
return true;
}
}
这是要执行的命令:
$test = $mysqli_extend->pquery('UPDATE user_list SET upriv = ? WHERE uname =?','moderator','admin');
而echo语句为我提供了数组“0:ss 1:moderator 2:admin”的正确内容
我预期会在以下方面出错:
“警告:mysqli_stmt::bind_param()的参数2应为引用”
因为对于最新的php版本,它有问题
“致命错误:按引用传递呼叫时间已被删除”
我可以问一下这个问题是否有解决办法吗?多亏了ryan vincent,通过链接我得到了临时解决办法,尽管我没想到这会在将来奏效:
foreach($input as $k => &$arg){
$Args[$k] = &$arg;
}
你看了吗?我真的以为应该有一个解决办法来克服避开&$符号时出现的“预期为参考”错误。。。我不知道我哪里弄错了:'(你能发布用于准备语句的代码吗?它与代码的最后一行完全相同…编辑以澄清以下示例:解释如何提供调用_user_func_array()的正确引用。