[請益] pdo prepare傳遞null<已解決>

看板PHP作者 (zelda)時間7年前 (2017/01/03 15:10), 7年前編輯推噓4(404)
留言8則, 2人參與, 最新討論串1/1
使用的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://www.ptt.cc/bbs/PHP/M.1483427415.A.9DF.html

01/03 16:49, , 1F
mysql version? mysql如果關掉該功能基本上只能模擬
01/03 16:49, 1F

01/03 16:50, , 2F
你看要不要檢查pdo_mysql driver安裝狀況跟mysql設定
01/03 16:50, 2F

01/03 18:19, , 3F
有 longblob/longtext 之類的東西?好像是某個底層限制..
01/03 18:19, 3F

01/03 18:19, , 4F

01/03 18:21, , 5F
這個issue是mysqli,但主角是 libmysql...pdo 也可能中招
01/03 18:21, 5F
感謝版友的建議 目前把php版本降回5.3.3 已經沒有這個錯誤 當初是上一篇的問題 想說試一下7的版本 結果落漆了 不曉得會不會是來源的問題? ※ 編輯: pili100 (118.163.209.145), 01/04/2017 14:11:36

01/04 16:14, , 6F
你這個滿靈異的,我猜你能公開貼的資訊不足以debug XD
01/04 16:14, 6F

01/04 16:15, , 7F
不過建議還是先上到 php5.6,至少兩年內還會有安全修正...
01/04 16:15, 7F
我又來回報進度了 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

01/08 16:04, , 8F
好雷...
01/08 16:04, 8F
文章代碼(AID): #1OQqvNdV (PHP)