php - 未定义的属性:mysqli_stmt::$bind_param
问题描述
我想以call_user_func_array
这种方式绑定可变编号参数(请阅读代码中的注释):
function dbQuery()
{
global $dbconnection;
if (func_num_args() < 1 || func_num_args() === 2) {
return error('خطای داخلی');
} else if (func_num_args() === 1) {
$stmt = $dbconnection->prepare(func_get_arg(0)); // Creating stmt
if (!$stmt) {
return error('خطای پایگاه داده');
}
if (!$stmt->execute()) {
return error('خطا در تعامل با پایگاه داده');
}
return $stmt;
} else {
$args = func_get_args();
$stmt = $dbconnection->prepare($args[0]); // args[0] is the query with question marks
if (!$stmt) {
return error('خطای پایگاه داده');
}
array_shift($args);
foreach ($args as $index => $arg) {
${'arg' . $index} = $dbconnection->real_escape_string($arg); // making args as variables because bind_params does not allow direct values
$args[$index] = ${'arg' . $index};
}
if (!call_user_func_array($stmt->bind_param,$args)) { // ERROR IS HERE LINE 67
return error('خطای امنیتی پایگاه داده');
}
if (!$stmt->execute()) {
return error('خطا در تعامل با پایگاه داده');
}
return $stmt;
}
}
$stmt = dbQuery('SELECT * FROM payments WHERE id=?','i',31);
$result = dbCheck($stmt);
var_dump($result->fetch_all());
错误是:
PHP Warning: Undefined property: mysqli_stmt::$bind_param in /home/mwxgaf/w/projects/foodorder/test.php on line 67
PHP Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($function) must be a valid callback, no array or string given in /home/mwxgaf/w/projects/foodorder/test.php:67
Stack trace:
#0 /home/mwxgaf/w/projects/foodorder/test.php(76): dbQuery()
#1 {main}
thrown in /home/mwxgaf/w/projects/foodorder/test.php on line 67
解决方案
call_user_func_array
期望一个可调用的作为第一个参数,并且$stmt->bind_param
是错误的格式。[$stmt, 'bind_param']
将是正确的可调用对象
来源:https ://www.php.net/manual/en/language.types.callable.php
实例化对象的方法作为数组传递,其中包含索引 0 处的对象和索引 1 处的方法名称。允许从类中访问受保护的和私有的方法。
推荐阅读
- android - 强制重新启动完整的应用程序以刷新 Cordova 中的包
- apache-kafka - 在 Kafka 0.10.2.x 中为代理设置 log.retentions.hours
- javascript - 如何限制 textarea 上的“撤消/重做”事件?
- perl - 动态增加 Text::TabularDisplay 中的列大小
- node.js - Unable to access response object data outside the function in node js
- postgresql - 使用 Postgres 创建多个脚本的问题
- excel - VBA 到 GAS 脚本转换
- erlang - 如何通过 Elixir / Erlang 中的指针相等比较两个结构
- node.js - Winston 没有为我的 Heroku MERN 应用程序编写日志,尽管它在本地运行良好
- r - 如何连接到安装了防火墙的闪亮应用程序?