Php PDO PDO语句::execute():SQLSTATE[HY000]:常规错误:1008 OCISSTMTEXECUTE:ORA-01008:未绑定所有变量

Php PDO PDO语句::execute():SQLSTATE[HY000]:常规错误:1008 OCISSTMTEXECUTE:ORA-01008:未绑定所有变量,php,oracle,pdo,Php,Oracle,Pdo,我最近把我的网站从OCI改成了PDO 我有一个PHP: foreach ($bindings as $key => $value) { if ( strpos( $query, $key) ) { $stmt->bindParam(":$key", $value); echo "Bound ". $key ." => ". $value; } } 输出: Bound :globalSearch0 => %NCR% Bound :glo

我最近把我的网站从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 OCISMTEXECUTE:ORA-01008:未绑定所有变量

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


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

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

它应该是$stmt->bindParam$key,$value

要使测试准确,它应该如下所示:

if( $stmt->bindParam(":$key", $value) ){
  echo "Bound ". $key ." => ". $value;
}
确保绑定实际成功