gpt4 book ai didi

php - 如何使用 call_user_func_array 调用 mysqli_stmt?

转载 作者:行者123 更新时间:2023-12-04 05:22:23 27 4
gpt4 key购买 nike

我试图将可变数量的参数传递给类的方法。这是我试图调用的类的函数:

class DbHelper{
....
public function Execute($query, $params){
$this->open();
$stmt = $this->mysqli->prepare($query) or die($this->mysqli->error);
call_user_func_array(array($stmt, 'bind_param'), $params); // 1
return $stmt->execute() ? $stmt->num_rows : 'ERROR';
}
....
}

这是我用来调用该函数的代码:
....
$conn = new DbHelper();
$params = array('ss', $ID, $i);
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', $params);
....

这给出了一个错误:

Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in ..mypath..\dbhelper.php on line



在我几个月前关于同一问题的另一篇文章(点击 here )中,有些人建议我使用以下代码:
call_user_func_array(array($stmt, 'bind_param'), refValues($params));

function refValues($arr){
if (strnatcmp(phpversion(),'5.3') >= 0){ //Reference is required for PHP 5.3+
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
return $arr;
}

再次使用它会产生相同的错误。如果我像这样调用函数(在 $params 之前添加 & ):
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', &$params); // 2

我收到此错误:

Deprecated: Call-time pass-by-reference has been deprecated in ..mypath..\save.php on line



或者,我已经为函数 DbHelper::Execute 尝试了这个定义:
public function Execute($query, $params){
$this->open();
$stmt = $this->mysqli->prepare($query) or die($this->mysqli->error);
$stmt->{'bind_param'}($params); // 3
return $stmt->execute() ? $stmt->num_rows : 'ERROR';
}

调用此将错误显示为:

Warning: Wrong parameter count for mysqli_stmt::bind_param() in ..mypath..\dbhelper.php on line



如果函数被正确调用,则参数计数对 bind_param 是正确的。

PHP 的版本是 5.3.8。

请问有什么帮助吗?

最佳答案

给你建议的功能需要接受$params也通过引用。这是一个稍微更新的版本:

function refValues(&$arr)
{
//Reference is required for PHP 5.3+
if (strnatcmp(phpversion(),'5.3') >= 0)
{
$refs = array();
foreach(array_keys($arr) as $key)
{
$refs[$key] = &$arr[$key];
}
return $refs;
}

return $arr;
}

关于php - 如何使用 call_user_func_array 调用 mysqli_stmt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570957/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com