PDO PDOStatement::execute():SQLSTATE[HY000]:一般错误:1008 OCIStm


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仍然输出错误消息:

警告:PDOStatement::execute():SQLSTATE[HY000]:常规错误:1008 OCIStmtExecute:ORA-01008:不是所有变量都绑定了

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

我是不是完全错过了什么?这与我使用oci_bind_by_name的代码相同,我从未遇到过任何问题,但bindParam似乎导致了这种情况。

如果数组键中已经有":",是否需要在bindParam参数中再次添加它?

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

为了使你的测试准确,它应该看起来像:

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

为了确保绑定实际成功,