【问题标题】:About PHP prepared statement关于 PHP 准备好的语句
【发布时间】:2014-09-16 18:26:31
【问题描述】:

我正在寻找一个简单的函数来执行准备好的语句。现在我遇到了一个问题:

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');

while echo 语句为我提供了正确的数组内容“0:ss 1:moderator 2:admin” 我预期会收到错误: “警告:mysqli_stmt::bind_param() 的参数 2 应为参考”

因为是最新的php版本,所以有问题 "致命错误:调用时传递引用已被删除"

请问有没有办法解决这个问题?

【问题讨论】:

  • 你看过这个answer
  • 我实际上预计应该有一个解决方法来解决“预期成为参考”的错误躲避 &$ 符号......而且我不确定我在哪里弄错了:'(
  • 你能发布用于准备语句的代码吗?
  • 和最后一行代码完全一样...编辑澄清
  • mysqli_stmt_bind_param 的示例解释了如何提供对 call_user_func_array() 的正确引用。

标签: php mysqli prepared-statement pass-by-reference


【解决方案1】:

感谢 ryan vincent,点击链接后我得到了临时工作,虽然我没想到这会在未来工作:

foreach($input as $k => &$arg){
    $Args[$k] = &$arg;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2010-11-30
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多