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