[請益]PHP寫入DB的錯誤訊息請教

看板Programming作者 (想飛的魚)時間9年前 (2014/10/27 16:33), 編輯推噓1(1022)
留言23則, 3人參與, 最新討論串1/1
不好意思,不確定是PO在這裡還是PHP版或DB版,若PO錯請版主通知小弟轉版,謝謝您 因為小弟工作上的關係,需要維公司的網站,最近在進行平台移轉時,後台在做寫入DB時 會出現錯誤,錯誤訊息如下: <b>Fatal error</b>: Uncaught exception 'Zend_Db_Statement_Mysqli_Exception' with message 'Mysqli statement execute error : No data supplied for parameters in prepared statement' in /home/oringnet/public_html/website/library/Zend/Db/Statement/Mysqli.php:218 Stack trace: #0 /home/oringnet/public_html/website/library/Zend/Db/Statement.php(284): Zend_Db_Statement_Mysqli-&gt;_execute(Array) #1 /home/oringnet/public_html/website/library/Zend/Db/Adapter/Abstract.php(436): Zend_Db_Statement-&gt;execute(Array) #2 /home/oringnet/public_html/website/library/Zend/Db/Adapter/Abstract.php(566): Zend_Db_Adapter_Abstract-&gt;query('UPDATE `product...', Array) #3 /home/oringnet/public_html/website/library/Zend/Db/Table/Abstract.php(962): Zend_Db_Adapter_Abstract-&gt;update('product_switch_...', Array, 'sn = 139') #4 /home/oringnet/public_html/website/library/Jasmin/Model/Abstract.php(903): Zend_Db_Table_Abstract-&gt;update(Array, 'sn = 139') #5 /home/oringnet/public_html/website/application/workbench/controllers/ProductController.php(352): Jasmin_Model_Abstrac in <b>/home/oringnet/public_html/website/library/Zend/Db/Statement/Mysqli.php</b> on line <b>218</b><br /> 因為小弟是PHP的新手,再翻遍估狗搜來的相關網頁皆沒看到相關的解決辦法,故只好上 來相詢請教, 已經查詢過出錯誤的程式碼 Zend/Db/Statement/Mysqli.php 218行如下 throw new Zend_Db_Statement_Mysqli_Exception("Mysqli statement execute error : " . $this->_stmt->error); 而整段function則為: public function _execute(array $params = null) { if (!$this->_stmt) { return false; } // if no params were given as an argument to execute(), // then default to the _bindParam array if ($params === null) { $params = $this->_bindParam; } // send $params as input parameters to the statement if ($params) { array_unshift($params, str_repeat('s', count($params))); call_user_func_array( array($this->_stmt, 'bind_param'), $params ); } // execute the statement //var_dump($this->_stmt); $retval = $this->_stmt->execute(); if ($retval === false) { /** * @see Zend_Db_Statement_Mysqli_Exception */ require_once 'Zend/Db/Statement/Mysqli/Exception.php'; throw new Zend_Db_Statement_Mysqli_Exception("Mysqli statement execute error : " . $this->_stmt->error); } // retain metadata if ($this->_meta === null) { $this->_meta = $this->_stmt->result_metadata(); if ($this->_stmt->errno) { /** * @see Zend_Db_Statement_Mysqli_Exception */ require_once 'Zend/Db/Statement/Mysqli/Exception.php'; throw new Zend_Db_Statement_Mysqli_Exception("Mysqli statement metadata error: " . $this->_stmt->error); } } // statements that have no result set do not return metadata if ($this->_meta !== false) { // get the column names that will result $this->_keys = array(); foreach ($this->_meta->fetch_fields() as $col) { $this->_keys[] = $this->_adapter->foldCase($col->name); } // set up a binding space for result variables $this->_values = array_fill(0, count($this->_keys), null); // set up references to the result binding space. // just passing $this->_values in the call_user_func_array() // below won't work, you need references. $refs = array(); foreach ($this->_values as $i => &$f) { $refs[$i] = &$f; } $this->_stmt->store_result(); // bind to the result variables call_user_func_array( array($this->_stmt, 'bind_result'), $this->_values ); } return $retval; } 有趣的是,select都沒問題,顯示正常,但在做新增及修改時的儲存都會出現相同的錯誤 訊息, 不過insert時Exception會抓到錯誤而跳出對話框訊息,做update時則會直接出現開頭 的錯誤訊息頁面。 以小弟的皮毛功力實在無法解決,還請前輩們可以幫下小弟,在此先說聲謝謝了。 平台伺服器資訊 Apache版本2.4.10 MySQL版本5.5.37-cll PHP版本5.3.29 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.43.168 ※ 文章網址: http://www.ptt.cc/bbs/Programming/M.1414398823.A.078.html

10/27 21:52, , 1F
同學你犯了framework user最基本的錯誤
10/27 21:52, 1F

10/27 21:52, , 2F
不要幫framework的code除錯
10/27 21:52, 2F

10/27 21:53, , 3F
人家千錘百鍊的code,有錯絕難由你發現
10/27 21:53, 3F

10/27 21:54, , 4F
一開始就跟你說 no data supplied for
10/27 21:54, 4F

10/27 21:54, , 5F
parameters in prepared statement了
10/27 21:54, 5F

10/27 21:56, , 6F
你就老老實實去檢查準備要寫入db的那一
10/27 21:56, 6F

10/27 21:56, , 7F
包物件或陣列裡面有什麼東東
10/27 21:56, 7F

10/27 21:58, , 8F
努力把它找到,你就可以累積經驗值。
10/27 21:58, 8F

10/28 02:30, , 9F
都是 they 的錯
10/28 02:30, 9F

10/28 08:49, , 10F
感謝M大,所以我應該是從呼叫這個
10/28 08:49, 10F

10/28 08:50, , 11F
函數的客製程式ProductController.php
10/28 08:50, 11F

10/28 08:51, , 12F
開始除錯是嗎?
10/28 08:51, 12F

10/28 08:56, , 13F
可是有疑問的是,整套系統在原來的平
10/28 08:56, 13F

10/28 08:57, , 14F
台上執行都正常,但換個地方就水土不
10/28 08:57, 14F

10/28 08:59, , 15F
服...囧,而小弟完全只會hello world.
10/28 08:59, 15F

10/28 13:06, , 16F
或許是Zend framework的版本問題
10/28 13:06, 16F

10/28 13:06, , 17F
這的確很難查
10/28 13:06, 17F

10/28 15:10, , 18F
感謝M大給的方向,今日冒著網站掛掉被
10/28 15:10, 18F

10/28 15:10, , 19F
罵的風險,將framework升級,結果問題
10/28 15:10, 19F

10/28 15:12, , 20F
解決了~再次感謝M大~
10/28 15:12, 20F

10/28 20:20, , 21F
哈哈有解決就好
10/28 20:20, 21F

10/28 20:20, , 22F
沒想到問題最後真的來自framework
10/28 20:20, 22F

10/28 20:20, , 23F
這對我也是個教訓
10/28 20:20, 23F
文章代碼(AID): #1KJWDd1u (Programming)