mysqli_stmt_bind_param()的参数3应该是一个引用,给定值 - PHP

时间:2017-04-04 21:01:38

标签: 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:
       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)));

2 个答案:

答案 0 :(得分:0)

我想我明白了:

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

?>

我在我的服务器上运行了这个,并在我的网站浏览器中获得了以下输出:

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

可帮助?

答案 1 :(得分:0)

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