【发布时间】:2018-11-06 21:15:32
【问题描述】:
当我想将数组传递给 bind_param 方法时,出现如下错误。
警告:call_user_func_array() 期望参数 1 是有效的回调,第一个数组成员不是 C:\xampp\htdocs\mvc\libs\Database.php 第 26 行中的有效类名或对象
代码如下:
class Database extends mysqli {
function __construct($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME) {
parent::__construct($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
}
function insert($table, $data){
echo $table . '<br />';
print_r($data);
echo '<br />';
$param_types=$this->gettypes_bind_param($data, $keys, $values, $place_holder);
$field_names= implode(', ', $keys);
$inputArray[]=&$param_types;
$j= count($values);
for ($i=0;$i<$j;$i++)
{
$inputArray[]=&$values[$i];
}
print_r($inputArray);
echo '<br />';
$result= $this->prepare("INSERT INTO $table ($field_names) VALUES ($place_holder)");
call_user_func_array(array($result, 'bind_param'), $inputArray);
$result->execute();
die;
}
function gettypes_bind_param(&$data, &$keys, &$values, &$place_holder){
$types='';
foreach ($data as $tmp)
{
switch (gettype($tmp))
{
case "string" :
$types.='s';
break;
case "integer" :
$types.='i';
break;
case "double" :
$types.='d';
break;
default :
$types.='b';
break;
}
$place_holder .='?, ';
}
$place_holder= rtrim($place_holder, ', ');
$keys = array_keys($data);
$values = array_values($data);
return $types;
}
对不起,我的英语
【问题讨论】:
-
$result->execute($inputArray);是一种选择 php.net/manual/en/pdostatement.execute.php 此处的示例 -
感谢您的回答,但这不是 PDOStatement