mysqli_stmt_bind_param()的参数3应为引用,给定值为-PHP

mysqli_stmt_bind_param()的参数3应为引用,给定值为-PHP,php,Php,我的代码: public function valRef($arr) { $refs = array(); foreach ($arr as $key => $value) { $refs[$key] = &$arr[$key]; } var_dump($refs); //var_dump($refs) returns something like this:

我的代码:

public function valRef($arr) {

        $refs = array();
        foreach ($arr as $key => $value) {
            $refs[$key] = &$arr[$key];
        }

        var_dump($refs);

       //var_dump($refs) returns something like this:
       array(1) {
       [0]=>
       &int(1)

        return $refs;
}
这是使用函数的地方。我不明白为什么返回的
$refs
数组不同。不应该和上面的一样吗

var_dump($this->helperClass->valRef($ref));
array(1) {
  [0]=>
  int(1)
}

        call_user_func_array('mysqli_stmt_bind_param', array_merge(array($q, $prep), $this->helperClass->valRef($ref)));
我想我明白了:

<?php

echo '<pre>';

function valRef(&$arr)
{
    $refs = array();

    foreach ($arr as $key => $value)
    {
        $refs[$key] = &$arr[$key];
    }

    var_dump($refs);
    echo '<hr>';

    return $refs;
}


$arr = array(1, 5, 7, "hello");

$refs = valRef($arr);

var_dump($refs);
echo '<hr>';


$link = mysqli_connect('localhost', 'testman', 'agave');

$q = mysqli_prepare($link, "SELECT ?, ?, ?, ?");

$prep = "iiis";

call_user_func_array('mysqli_stmt_bind_param', array_merge(array($q, $prep), $refs));

mysqli_stmt_execute($q);


mysqli_stmt_bind_result($q, $c1, $c2, $c3, $c4);

while (mysqli_stmt_fetch($q))
{
    echo "$c1, $c2, $c3, $c4";
}

mysqli_stmt_close($q);

mysqli_close($link);

?>



帮助?

发生这种情况的原因是您将valRef($arr)作为参数传递。由于函数不是引用变量,因此无法找到指向它的指针。一旦分配给变量,它将有一个引用指针来使用。

PDO使这类事情变得微不足道
mysqli
是一个更笨重的界面,会造成很多摩擦。此时您是否承诺使用mysqli?
调用用户函数数组
需要两个参数。第一个参数是方法名,
mysqli_stmt_bind_param
,第二个参数是提供给方法的参数数组。@tadman这是一个旧项目。我只是想让它发挥作用。我没有时间重做整件事。所以我想我还是用mysqli吧。谢谢。我会试试看。不客气。。。我真的可以用这笔赏金,暗示,暗示…:-)
array(4) {
  [0]=>
  &int(1)
  [1]=>
  &int(5)
  [2]=>
  &int(7)
  [3]=>
  &string(5) "hello"
}
array(4) {
  [0]=>
  &int(1)
  [1]=>
  &int(5)
  [2]=>
  &int(7)
  [3]=>
  &string(5) "hello"
}
1, 5, 7, hello