我创建了一个“快捷方式”方法的子对象,例如 return_all 和其他方法,以将 PDO 作为数据库对象运行。
简而言之,我的所有查询(无论是插入、更新、删除还是选择)都通过 2 种不同的方法,我调用的最后一种方法如下所示:
/* * execute_prepared_sql() 将根据用户参数准备 SQL: * */
private function execute_prepared_sql() {
if ($this->prepare_sql() == true) {
try {
$this->stmt = $this->pdo->prepare($this->sanitized_sql);
$this->stmt->execute($this->bound_parameters);
} catch (PDOException $e) {
set_debug($e->getMessage(), true);
return false;
}
return true;
}
return false;
}
然后我有看起来像这样的方法:
public function return_active_partners() {
if ($this->select(array("query_tables" => $this->table_name, "conditions" => array("AND" => array("partners.status" => 1))))) {
$this->stmt->setFetchMode(PDO::FETCH_ASSOC);
return $this->stmt->fetchAll();
}
}
然后,上述方法将有效地返回结果($this->select() 调用 execute_prepared_sql() 方法。
这一切都很好,但我有一个非常烦人的问题,有时(而且真的是随机的)我得到一个“SQLSTATE [HY093]:无效的参数号:没有参数被绑定”错误。当我在彼此之后执行 2 次查询时,它似乎会发生更多(比如我删除一行,然后返回剩余行的结果集)
似乎发生的是在 execute_prepared_sql() 调用期间绑定参数没有被删除。我的印象是,当调用 execute() 时,所有绑定参数都将被“重置”或清除,但情况似乎并非如此。
我的问题是,如何清除 PDO 语句可能存储的任何绑定参数,以确保我不会两次使用相同的参数?还是您可以看到我做错了什么,这可能是问题所在?