2010-05-21 24 views
1

好的,我flummoxed。 我想在數據庫上執行查詢(本地),我不斷收到連接重置錯誤。我一直在通用的DAO類中使用下面的方法來構建一個查詢字符串並傳遞給Zend_Db API。連接重置在MySQL查詢

public function insert($params) { 
    $loop = false; 
    $keys = $values = ''; 
    foreach($params as $k => $v){ 
     if($loop == true){ 
      $keys .= ','; 
      $values .= ','; 
     } 
     $keys .= $this->db->quoteIdentifier($k); 
     $values .= $this->db->quote($v); 
     $loop = true; 
    } 

    $sql = "INSERT INTO " . $this->table_name . " ($keys) VALUES ($values)"; 

    //formatResult returns an array of info regarding the status and any result sets of the query 
    //I've commented that method call out anyway, so I don't think it's that 
    try { 
     $this->db->query($sql); 
     return $this->formatResult(array(
       true, 
       'New record inserted into: '.$this->table_name 
     )); 
    }catch(PDOException $e) { 
     return $this->formatResult($e); 
    } 
} 

到目前爲止,這一直運行良好 - 自我們生成新表以記錄用戶輸入後,錯誤一直在發生。插入字符串看起來是這樣的:

INSERT INTO tablename(`id`,`title`,`summary`,`description`,`keywords`,`type_id`,`categories`) VALUES ('5539','Sample Title','Sample content',' 
\'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In et pellentesque mauris. Curabitur hendrerit, leo id ultrices pellentesque, est purus mattis ligula, vitae imperdiet neque ligula bibendum sapien. Curabitur aliquet nisi et odio pharetra tincidunt. Phasellus sed iaculis nisl. Fusce commodo mauris et purus vehicula dictum. Nulla feugiat molestie accumsan. Donec fermentum libero in risus tempus elementum aliquam et magna. Fusce vitae sem metus. Aenean commodo pharetra risus, nec pellentesque augue ullamcorper nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam vel elit libero. Vestibulum in turpis nunc.\'','this,is,a,sample,array',1,'category title') 

下面是它的組裝查詢(的var_dump)之前獲得的參數:

array 
    'id' => string '1' (length=4) 
    'title' => string 'Sample Title' (length=12) 
    'summary' => string 'Sample content' (length=14) 
    'description' => string '<p>'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In et pellentesque mauris. Curabitur hendrerit, leo id ultrices pellentesque, est purus mattis ligula, vitae imperdiet neque ligula bibendum sapien. Curabitur aliquet nisi et odio pharetra tincidunt. Phasellus sed iaculis nisl. Fusce commodo mauris et purus vehicula dictum. Nulla feugiat molestie accumsan. Donec fermentum libero in risus tempus elementum aliquam et magna. Fusce vitae sem metus. Aenean commodo pharetra risus, nec pellentesque augue'... (length=677) 
    'keywords' => string 'this,is,a,sample,array' (length=22) 
    'type_id' => int 1 
    'categories' => string 'category title' (length=43) 

調用的下一個港口在檢查表上的限制,因爲它如果「描述」的長度大約在300標記(它在310-330之間變化),似乎插入。字段限制設置爲VARCHAR(1500),並且此字段的驗證不允許超過1200的任何HTML超過1200,而不包含800。

真正的反彈是,如果我把這個SQL字符串並通過命令行執行它,它工作正常 - 所以我不能爲我的生活找出什麼是錯的。

我試圖擴展服務器參數即 Unexpected Connection Reset: A PHP or an Apache issue?

因此,概括地說,我很爲難。有任何想法嗎?

回答

1

好的,對於遇到這個問題的任何人 - 問題是要處理Zend_Db_Statement - 或者說這個組件依賴的preg庫。它在Zend問題跟蹤器中被標記爲:http://framework.zend.com/issues/browse/ZF-8399,但它並不嚴格是Zend lib的問題。根據您的服務器環境,您可能會也可能不會遇到此問題。在我而言,這個錯誤發生在:

Win XP的, WAMP 2 PHP 5.3

它可以通過使用

db->getConnection()->exec($sql) 

有效地直接通過適配器執行SQL(解決PDO等等)。或者,你可以修改你的服務器來糾正PCRE本身的問題(儘管我承認我不完全確定你會怎麼做)。希望可以幫助其他人有同樣的問題

+0

非常感謝,幫助我! :)順便說一句,那應該是'$ db-> getConnection() - > exec($ sql)' – Znarkus 2011-06-30 14:57:30

+0

thx!我修改了語法 – sunwukung 2011-06-30 15:15:04

0

你能發佈確切的錯誤消息($ this-> db-> errorInfo()如果你使用PDO)嗎? 你確定你建立了db連接嗎?

+0

連接正在重置,所以我沒有任何腳本輸出 – sunwukung 2010-05-21 10:26:16

+0

以及如果將PDO :: ERRMODE_SILENT設置爲false會怎樣? – 2010-05-21 12:26:20

+0

不行,仍然死亡。如果我創建了一個新的PDO實例,那沒關係,只要它碰到Zend_API就會中斷。 – sunwukung 2010-05-21 13:37:23

0

對於那些誰是谷歌搜索,發現這個職位有關連接做MySQL查詢時重置:從sunwukung答案

除此之外,也請您查看,如果有一瓶 - 在你的MySQL設置中,特別是這一個:

max_allowed_packet = 1M 

你可以改變它爲一個更大的數字。這是我的:

max_allowed_packet = 32M 

現在它的工作。

說明:

你可以從設置名稱讀,連接復位主要是進進出出的MySQL,其中「終止」到MySQL連接的過大的數據集的結果。