【发布时间】:2014-01-02 15:37:02
【问题描述】:
我有一个可以接受任意数量参数的函数,如下所示:
public function executePreparedStatement($query, $paramString = ''){
$stmt = $this->db->prepare($query);
if (func_num_args() > 2){
$parameters = func_get_args();
array_shift($parameters); // Get rid of the query
$parameters = array('s', 'email@email.com'); //Hard code for test
call_user_func_array(array($stmt, "bind_param"), $parameters);
// $stmt->bind_param($parameters[0], $parameters[1]); //Hard code for test
}
$stmt->execute();
$this->result = $stmt->get_result();
$stmt->close();
}
问题是当我按原样运行代码时,stmt对象显示:
No data supplied for parameters in prepared statement
但是,当我注释掉 call_user_func_array 调用并取消注释后续行时,查询有效。
【问题讨论】:
-
$parameters包含什么? -
func_get_args() 在我的测试中返回
['SELECT * FROM test WHERE email=?', 's', 'email@email.com']我保存到 $parameters。然后我使用 array_shift 摆脱查询,所以当我调用 bind_param $parameters = ['s', 'email@email.com']; -
简短回答:当您想制作像这样的通用准备语句执行函数时,使用 PDO 会更容易。