2011-05-12 46 views
2

是否可以避開mysql_unbuffered_query()通過打開第二個連接一次運行一個查詢的限制?與mysql_unbuffered_query使用多個連接

例如,下面的代碼是給我的錯誤:

mysql_select_db())調用時沒有首先從先前的無緩衝查詢獲取的所有行

 $feedData = mysql_unbuffered_query($sql, $this->_unbufferedDbManager->db->connection); 

     while ($record = mysql_fetch_assoc($feedData)) { 
      File::fputcsv($this->_fileHandle, $record, $this->delimiter, $this->enclosure);  

      $sql = "UPDATE transactions 
        SET  feed_transmit_date = '$this->today' 
        WHERE transaction_id = " . $record['transaction_id']; 
      $this->dbManager->DbQuery($sql); 

      print_r($this->_unbufferedDbManager->db->connection); 
      print_r($this->dbManager->db->connection); 
     } 

兩個print_r的功能(的在最後輸出: 資源ID#637Resource編號#639

DbManager是一個老梨數據訪問層

注意:我會使用一個mysql_unbuffered_query標籤,但是最近我打開了一個賞金條,將我置於「創建新標籤特權」之下。

+0

數據庫的每個連接/句柄都有自己的上下文,因此可以打開多個連接並在每個連接上運行獨立查詢。只需要小心地在所有的mysql _ *()調用中指定正確的連接句柄,否則你會在兩者之間的混合操作中得到非常奇怪/不好的結果。 – 2011-05-12 21:54:38

+0

由於看起來你有2個不同的數據庫連接(不同的資源ID),這應該是工作。在旁註中,最好在循環之後立即執行'UPDATE',這樣未緩衝的查詢可以快速完成所有的讀取操作? – Fanis 2011-05-12 22:01:17

+0

@Fanis - 這就是我們最初嘗試的方式,它絕對是一種更有效的方法。問題在於,監視錯誤變得很困難,原來的查詢是從不同的表和數據庫中選擇而不是更新查詢,它們比我作爲這個問題的例子要複雜一些。也許我只是得到一個誤導性的錯誤信息,而我正在爲錯誤的解決方案吠叫錯誤的樹。 – 2011-05-13 14:15:03

回答

1

關於PMV的建議我正在寫這個答案。總之,即使它們報告了不同的資源ID,它仍然是使用相同連接的不同數據庫類的問題。有關更多信息,請參閱問題的評論。

+1

即使多個對象實例實例具有不同的資源ID,pear的DbManager也始終使用相同的連接。 – 2011-05-18 20:42:33