以前用oci的时候遇到clob和blob的问题,这次用Pdo又遇到这个问题
pdo在字符长度小于varchar4000的前提下,你用clob字段,是不会有任何问题的。可以直接读写
但是存入的字符超过上面的限制时,就会报标题的错误
百度了一下,基本都是JAVA的解决方案,PHP的很少。
实际上,这个问题在OCI的时候遇到过。
以下是解决方案:
原始代码,这种方式可以处理字符串长度小于4000的clob字段,但是超过就要报错了:
//处理where的占位,注意where字句的占位符,不能有引号 $data=array_merge($data,$this->_dao_where_params); $sth=$this->_dao_conn->prepare($update_str); if($sth->execute($data)) { $nums=$sth->rowCount(); //释放游标 $sth->closeCursor(); return $nums; }
后来的处理方式,注意foreach循环内的第二个参数是引用传递,所以不能用$v,必须用数组名加下标的形式。
foreach ($data as $k=>$v) { $sth->bindParam($k+1,$data[$k],PDO::PARAM_STR,strlen($v)); } if($sth->execute()) { $nums=$sth->rowCount(); //释放游标 $sth->closeCursor(); return $nums; }
关键点就是foreach中,bindParam的第二个参数,被这个折腾了很久,上次oci好像也是这里折腾了很久,都是最后解决了,才想起。
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《pdo的OCIStmtExecute: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误》
发表评论