我创建了一个“快捷”方法的子对象,例如return_all和其他方法,以PDO作为数据库对象运行。
简而言之,我的所有查询(无论是插入,更新,删除还是选择)都经过两种不同的方法,我调用的最后一种方法就是这样:
/ * * 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语句可能存储的任何绑定参数,以确保我不会两次使用相同的参数?或者还有什么你可以看到哪些我做错了哪个可能是问题?