PDO PDOStatement::execute(): SQLSTATE[HY000]: General error: 1008 OCIStmtExecute: ORA-01008: not all variables bound

PDO PDOStatement::execute(): SQLSTATE[HY000]: General error: 1008 OCIStmtExecute: ORA-01008: not all variables bound

我最近将我的网站从 OCI 转换为 PDO。

我有这个PHP:

  foreach ($bindings as $key => $value) {
   if ( strpos( $query, $key) ) {
    $stmt->bindParam(":$key", $value);
    echo "Bound ". $key ." => ". $value;
   }
  }

输出:

Bound :globalSearch0 => %NCR%
Bound :globalSearch1 => %NCR%
Bound :globalSearch2 => %NCR%
Bound :globalSearch3 => %NCR%
Bound :globalSearch4 => %NCR%

但是PHP仍然输出错误信息:

Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1008 OCIStmtExecute: ORA-01008: not all variables bound

但是所有变量 都是 绑定的!我回应了生成的 SQL 查询,它使用了 5 个变量,与绑定的数量相同!

我是不是完全漏掉了什么?这与我使用 oci_bind_by_name 的代码相同,我从来没有遇到任何问题,但 bindParam 似乎是导致此问题的原因。

如果您的数组键中已经包含':',您是否需要在bindParam 参数中再次添加它?

应该是$stmt->bindParam($key, $value);

为了使您的测试准确,它应该如下所示:

if( $stmt->bindParam(":$key", $value) ){
  echo "Bound ". $key ." => ". $value;
}

确保绑定确实成功