我最近将我的网站从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;
}
为了确保绑定实际成功,