Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于PHP预备语句_Php_Mysqli_Prepared Statement_Pass By Reference - Fatal编程技术网

关于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()的正确引用。