作者 主題: No data supplied for parameters in prepared statement 錯誤  (閱讀 5019 次)

0 會員 與 1 訪客 正在閱讀本文。

nightsmile

  • 可愛的小學生
  • *
  • 文章數: 9
    • 檢視個人資料
各位學長好
因為小弟工作上的關係,需要維公司的網站,最近在進行平台移轉時,網頁在做寫入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

nightsmile

  • 可愛的小學生
  • *
  • 文章數: 9
    • 檢視個人資料
對不起,小弟被前輩指正不該為framework debug,應該朝客製的地方著手 :-[,但小弟真的是PHP 只會hello world...
以下是出錯的PHP檔ProductController.php(352)裡的程式碼的片段
if ($product_switch == null)
      {
         $product_switch = Array();
         $insert = true;         
      }   
         $product_switch['product_sn'] = $data['sn'];
         $product_switch['total_port'] = (int)$data['total_port'];
         $product_switch['ethernet_port'] = (int)$data['ethernet_port'];
         $product_switch['fiber_port'] = (int)$data['fiber_port'];
         $product_switch['gigabit_port'] = (int)$data['gigabit_port'];
         $product_switch['combo_port'] = (int)$data['combo_port'];
         $product_switch['poe_port'] = (int)$data['poe_port'];
         $product_switch['mount_style'] = $data['mount_style'];
         $product_switch['manage'] = $data['manage'];
         $product_switch['is_en50155'] = is_null($data['is_en50155']) ? 0 : $data['is_en50155'];
         $product_switch['is_poe'] = is_null($data['is_poe']) ? 0 : $data['is_poe'];         
         $product_switch['is_gigabit'] = is_null($data['is_gigabit']) ? 0 : $data['is_gigabit'];
         $product_switch['update_time']    = date('Y-m-d H:i:s');
          $product_switch['update_user_sn'] = (int) @$this->user['sn'];   
         //var_dump($product_switch);         
         if ($insert)
               $product_switch_property->append($product_switch);               
         else{
                //$product_switch_property->updateByPrimaryKey($product_switch->toArray());   
               $ps=$product_switch->toArray();            
               $product_switch_property->updateByPrimaryKey($ps);
         }      

錯在 $product_switch_property->updateByPrimaryKey($ps); 這段
應該是上面湊陣列有出問題,但是整個系統在原來的平台伺服器上運作正常,
移轉到新平台就水土不服了,
希望學長們能給我個PHP debug的方向,讓我可以找出問題點,感謝。

nightsmile

  • 可愛的小學生
  • *
  • 文章數: 9
    • 檢視個人資料
謝謝各位學長前輩的庇佑,此問題解決了...
有點瞎,將framework升級後就沒有出現錯誤訊息了 ;)