问题描述
sql长度为15万长度的时候失败,此时bindParam
数组大小为 68000
sql 类型是insert
,使用了参数绑定的方式,打印出来的sql都是占位符。
问题出现的环境背景及自己尝试过哪些方法
错误分析,一开始是bindValue($i,$v,PDO:STR);
这块报错。
后面追踪到 $sth = $this->conn->prepare($sql)
返回的对象为空,导致bindValue
方法无法执行。
但在sql为14万长度 左右时执行成功,此时bindParam
数组大小为 63000
;
此时的sql与15万长度的sql 长度不一样,但语法都正确,没有被截取。
你期待的结果是什么?实际看到的错误信息又是什么?
百度过了,没看到prepare
函数的中string
参数的限制,
14万长度的sql也才 0.2mb=16
万字节
应该不是超长度了。 关于pdo的参数设置感觉也不太相关。
希望有经验的大神能分析一下这个问题,顺便问下 pdo底层的源码实现在哪可以看? 谢谢
排查过程
或者是 直接以一条 拼接好的 sql 直接发给 Mysql 处理。
prepare()函数的处理方式与 参数 PDO::ATTR_EMULATE_PREPARES 的值 (TRUE OR FALSE) 有关