折雨的天空

博客介绍:本博客当前共有文章【969】篇,总阅读量【5,189,791】次,第一篇博客发表于【2011年04月06日 10时34分】,距今已【4998】天,感谢您的使用!

您的位置:折雨的天空 >php开发> pdo的OCIStmtExecute: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误

pdo的OCIStmtExecute: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误

以前用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 值错误

奖励一下

取消

分享不易,烦请有多多打赏,如您也困难,点击右边关闭即可!

扫码支持
扫码打赏,5元,10元,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

-秒后自动关闭,如已打赏,或者不愿打赏,请点击右上角关闭图标。

发表评论

路人甲 表情
看不清楚?点图切换

网友评论(2)

站长,你好,我正在开发一个这个项目,遇到了这个问题,没看明白你说的解决方法,能否详细说明一下呢?
wjh 5年前 (2020-01-13) 回复
@wjh:关键点就是foreach中,bindParam的第二个参数。foreach的时候,要用原数组名加索引的方式,不能用foreach里面的局部变量
我好笨 5年前 (2020-01-15) 回复