作者pili100 (zelda)
看板PHP
标题[请益] pdo prepare传递null
时间Tue Jan 3 15:10:11 2017
使用的php版本是7.0
自己写了一个mysql procedure
不过我想和这个无关
$str = 'call checkin(:stcode, :imei, @rs)';
$stmt = $cn->prepare($str);
$stmt->bindValue(":stcode", null, PDO::PARAM_NULL);
$stmt->bindParam(":imei", $this->imei);
$stmt->execute();
//在这行报错
//PHP Fatal error: Allowed memory size of 134217728 bytes
//exhausted (tried to allocate 574448776 bytes)
测试的情况是,如果
$cn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
这设定就会出错,如果
setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
就可以执行
并不是说可以执行就算了,用true并不算是利用到preare防止sql inject
有人有遇到类似的情况可以给个方向吗?
感恩
--
最近看到的签名档,拿来借用,不晓得会不会犯了智产权?
西医治标
中医治本
中西合璧
治成标本
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.209.145
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1483427415.A.9DF.html
1F:推 locklose: mysql version? mysql如果关掉该功能基本上只能模拟 01/03 16:49
2F:→ locklose: 你看要不要检查pdo_mysql driver安装状况跟mysql设定 01/03 16:50
3F:推 GALINE: 有 longblob/longtext 之类的东西?好像是某个底层限制.. 01/03 18:19
5F:→ GALINE: 这个issue是mysqli,但主角是 libmysql...pdo 也可能中招 01/03 18:21
感谢版友的建议
目前把php版本降回5.3.3
已经没有这个错误
当初是上一篇的问题
想说试一下7的版本
结果落漆了
不晓得会不会是来源的问题?
※ 编辑: pili100 (118.163.209.145), 01/04/2017 14:11:36
6F:推 GALINE: 你这个满灵异的,我猜你能公开贴的资讯不足以debug XD 01/04 16:14
7F:→ GALINE: 不过建议还是先上到 php5.6,至少两年内还会有安全修正... 01/04 16:15
我又来回报进度了
php更新到5.6
mysql server 更新到5.5
目前大概可以确定问题的方向是
我的procedure里面有一段建立临时表
再把它select出来给程式抓资料
把第8行这句select反白就可执行
我把程式贴在以下网址
http://paste.ofcode.org/FSzC8NrtWXvmCKHNgimL5B
这问题如何解决
真伤脑筋
※ 编辑: pili100 (118.163.209.145), 01/05/2017 17:53:22
中间试了很多可能性
最後测试可用的情况
在procedure里
有使用cursor
如果会使用到select抛出资料的
就放弃使用cursor吧,会出现
Packets out of order.
如果是会出现Segmentation fault
就是要你用完pdoStatement
记得null
结论
setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
使用上要小心
不晓得那个版本的预设是false
我的版本:
php 5.6.29
mysql server 5.5.54
终於找出问题
可以往下一关前进了
※ 编辑: pili100 (118.163.209.145), 01/06/2017 17:20:18
8F:推 GALINE: 好雷... 01/08 16:04