call_user_func_array() 返回无效 class 或对象错误
call_user_func_array() returning with an invalid class or object error
我是 PHP 的新手,我正在尝试创建一个函数,该函数可以将参数中给定的任何参数插入到也指定为函数参数的 table 中,但是当我执行它说的代码:
call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
这是我的代码:
function insert($table, $args){
$Query = "INSERT INTO ? VALUES(";
$types="";
foreach($args as $arg){
$Query=$Query."?,";
$type = gettype($arg);
switch ($type) {
case "string":
$types = $types."s";
break;
case "integer":
case "double":
$types = $types."d";
break;
}
}
$Query=substr($Query, 0, -1);
$Query=$Query.")";
global $mysqli;
$stmt=$mysqli->prepare($Query);
echo $stmt;
array_unshift($args, $table);
array_unshift($args, $types);
call_user_func_array(array($stmt, "bind_param"), $args);
$stmt->execute();
}
所以这里有什么问题,谢谢你?
为什么,哦,你为什么要创建这样的功能?
别考虑创建如此复杂且毫无用处的功能。这将是你的噩梦。相信我的建议,停止你现在正在做的事情。
如果您只是从 PHP 开始,那么忘记 mysqli。它缺少很多功能并且非常复杂。开始学习PDO。
使用 PDO,您不需要这些功能。
首先打开PDO连接:
$pdo = new PDO("mysql:host=localhost;dbname=db_name;charset=utf8mb4", 'username', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
然后你可以像这样执行一个简单的语句:
$pdo->prepare('INSERT INTO tableA(col1, col2) VALUES(?,?)')
->execute(['val1', 'val2']);
绑定未知数量的参数也很简单
$stmt = $pdo->prepare('SELECT * FROM TableA WHERE Id IN ('.implode(',', array_fill(0, count($ids), '?')).')');
$stmt->execute($ids);
$data = $stmt->fetchAll();
看看它比你的自定义函数简单多了。
我是 PHP 的新手,我正在尝试创建一个函数,该函数可以将参数中给定的任何参数插入到也指定为函数参数的 table 中,但是当我执行它说的代码:
call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
这是我的代码:
function insert($table, $args){
$Query = "INSERT INTO ? VALUES(";
$types="";
foreach($args as $arg){
$Query=$Query."?,";
$type = gettype($arg);
switch ($type) {
case "string":
$types = $types."s";
break;
case "integer":
case "double":
$types = $types."d";
break;
}
}
$Query=substr($Query, 0, -1);
$Query=$Query.")";
global $mysqli;
$stmt=$mysqli->prepare($Query);
echo $stmt;
array_unshift($args, $table);
array_unshift($args, $types);
call_user_func_array(array($stmt, "bind_param"), $args);
$stmt->execute();
}
所以这里有什么问题,谢谢你?
为什么,哦,你为什么要创建这样的功能?
别考虑创建如此复杂且毫无用处的功能。这将是你的噩梦。相信我的建议,停止你现在正在做的事情。
如果您只是从 PHP 开始,那么忘记 mysqli。它缺少很多功能并且非常复杂。开始学习PDO。
使用 PDO,您不需要这些功能。
首先打开PDO连接:
$pdo = new PDO("mysql:host=localhost;dbname=db_name;charset=utf8mb4", 'username', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
然后你可以像这样执行一个简单的语句:
$pdo->prepare('INSERT INTO tableA(col1, col2) VALUES(?,?)')
->execute(['val1', 'val2']);
绑定未知数量的参数也很简单
$stmt = $pdo->prepare('SELECT * FROM TableA WHERE Id IN ('.implode(',', array_fill(0, count($ids), '?')).')');
$stmt->execute($ids);
$data = $stmt->fetchAll();
看看它比你的自定义函数简单多了。