我有一个为我处理MySQLi准备查询的函数。此功能的设计使其易于键入,因此我无需键入3-4行即可使用简单的查询。这是代码:
public function preparedQuery($query, $values, $display = false)
{
$mysqli = $this->connectDatabase();
$repeat = str_repeat('?', count($values));
$repeat = trim($repeat, ',');
$stmt = $mysqli->prepare($query);
$types = str_repeat('s', count($values));
$bind = array();
foreach($values as $key => $val)
{
$bind[$key] = &$values[$key];
}
var_dump($query, $types, $bind);
array_unshift($bind, $types);
call_user_func_array(array($stmt, 'bind_param'), $bind);
$stmt->execute();
if($display)
{
$res = $stmt->get_result();
return $res->fetch_assoc();
}
return true;
}
正如你所看到的,这个功能对我来说是最重要的。我可以运行SELECT,UPDATE和SELECT查询,它会执行得很好。但是,当我尝试运行INSERT查询时,我收到以下错误:
警告:call_user_func_array()期望参数1有效 回调,第一个数组成员不是有效的类名或对象 第40行的C:\ xampp \ htdocs \ system \ mysqli.class.php
致命错误:在非对象中调用成员函数execute() 第42行的C:\ xampp \ htdocs \ system \ mysqli.class.php
我正在尝试运行的是:
以下是一些使用示例:
var_dump($ db-> preparedQuery(“INSERT INTO texts(indentifier,display_text)VALUES(?,?)”,array('test1','test2')));
这是var_dump的输出:
string(59)“INSERT INTO texts(indentifier,display_text)VALUES(?,?)”string(2)“ss”array(2){[0] => & string(5)“test1”[1] => & string(5)“test2”}
我做错了什么?