【问题标题】:Parameter 3 to mysqli_stmt_bind_param() expected to be a reference, value given - PHPmysqli_stmt_bind_param() 的参数 3 应为参考,给定值 - PHP
【发布时间】:2017-11-14 04:15:05
【问题描述】:

我的代码:

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

【问题讨论】:

  • PDO 让这种事情变得微不足道。 mysqli 是一个更笨重的界面,会引起很多摩擦。此时您是否致力于mysqli
  • call_user_func_array 需要 2 个参数。第一个参数是方法名称mysqli_stmt_bind_param,第二个参数是提供给方法的参数数组。
  • @tadman 这是一个老项目。我只是想让它工作。我没有时间重做整个事情。所以我想我被mysqli困住了。

标签: php


【解决方案1】:

我想我明白了:

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

有帮助吗?

【讨论】:

  • 谢谢。我会试一试,看看效果如何。
  • 不客气。 ...我真的可以使用那个赏金,提示,提示... :-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多