Php 尝试插入mysql时调用用户func数组错误
我有一个insert函数,用于大多数插入操作。看起来是这样的:Php 尝试插入mysql时调用用户func数组错误,php,mysqli,Php,Mysqli,我有一个insert函数,用于大多数插入操作。看起来是这样的: //insert function public function insert($prep, $table, $data) { $columns = ""; $values = array(); $val = array(); foreach ($data as $column => $value) {
//insert function
public function insert($prep, $table, $data) {
$columns = "";
$values = array();
$val = array();
foreach ($data as $column => $value) {
$columns .= ($columns == '') ? '' : ', ';
$columns .= $column;
$values[$column] = &$data[$column];
}
$a = str_repeat('?, ', count($data) );
$b = substr_replace($a, '', -2);
$q = $this->mysqli->prepare("INSERT INTO $table ($columns) VALUES ($b)");
call_user_func_array( array($q, 'bind_param'), array_merge(array($prep), $values) );
$q->execute();
$q->close();
//return the last ID used in the database.
return $this->mysqli->insert_id;
$this->mysqli->close();
}
对于所有插入,上述函数都可以正常工作。我需要做的就是:
$db = new Db();
$data = array(
"message_title" => "'$this->messageTitle'",
"message_body" => "'$this->messageBody'",
"sender_id" => $this->senderID,
"receiver_id" => $this->receiverID,
"message_date" => date("Y-m-d H:i:s")
);
$db->insert('ssiis', 'messages', $data);
但是,当我尝试添加到一个新表时,我遇到了一个错误,该表将保存搜索
public function addSearchTerm($searchTerm, $user_id, $today) {
$addSearch = array();
$addSearch = array(
"user_id" => $user_id,
"term" => $searchTerm,
"search_date" => $today
);
$prep = 'iss';
$this->db->insert($prep, 'search_tems', $addSearch);
}
插入函数的一些var_转储
var_dump($columns);
string(26) "user_id, term, search_date"
var_dump($b);
string(7) "?, ?, ?"
var_dump($values);
array(3) { ["user_id"]=> &int(64) ["term"]=> &string(9) "Wolverine" ["search_date"]=> &string(19) "2014-12-01 10:12:50" }
警告呢
警告:call_user_func_array()要求参数1为有效回调,第169行/var/www/vhosts/example.com/httpdocs/com/classes/Db.class.php中的第一个数组成员不是有效的类名或对象致命错误:调用成员函数execute()在第170行的/var/www/vhosts/example.com/httpdocs/com/classes/Db.class.php中的非对象上
打印输出是多少($q);奇怪的它不会显示任何内容。
var\u dump
给出bool(false)
这就是问题所在。。。您的查询有问题,因此,$q而不是对象是false,因此false->bind_param()不可调用。。。