1

我创建了一个“快捷方式”方法的子对象,例如 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 语句可能存储的任何绑定参数,以确保我不会两次使用相同的参数?还是您可以看到我做错了什么,这可能是问题所在?

4

0 回答 0