2012-12-11 78 views
2

我想通過我的查詢結果中循環多次,我有2種方式記:如果連接在獲取期間丟失,mysql_fetch_array會失敗嗎?

1-   
while($data = mysql_fetch_array($res , MYSQL_ASSOC) 
{ 
array_push($new_arr , $data); 
} 
foreach($sites as $s){ 
    foreach($new_arr as $d) 
    { 
    //some code 
    } 
} 

2- 
foreach($sites as $s){ 
    while($data = mysql_fetch_array($res , MYSQL_ASSOC) 
    { 
    //some code 
    } 
mysql_data_seek($res,0);//set the pointer 
} 

我的問題:我想選擇2更有效,但如果我失去連接mysql_fetch_array期間分貝(選項2)?我得到了分配的結果;這將需要大約10-20分鐘。這會影響查詢結果($ res)還是它們安全?

+0

如果連接在提取過程中失敗,那麼'mysql_fetch_array'中不會有任何內容。此外,您需要停止使用'mysql_'函數,因爲它們[已被棄用](http://www.deprecatedphp.com/mysql)。你應該使用'mysql_error'來嘗試捕獲錯誤。 – Kermit

+0

它需要10-20分鐘?不管選擇哪種方法,您最好長時間努力地檢測故障,以及如何恢復。忘記一個愚蠢的mysql連接,整個服務器都可以關閉。 – goat

+0

njk:我運行查詢並從數據庫中獲取數據,一旦我在$ res中獲得數據,我運行fetch_array,你說如果 - 當我在mysql_fetch_array循環中 - 與服務器的連接時,我得到了數據從丟失,然後$ res將是空的? –

回答

3

執行mysql_query()時,數據映射到由mysql客戶端分配的緩衝區中,因此失去連接是無關緊要的。您引用的第一個方法將以PHP數組的形式創建數據的進一步副本 - 這不是非常有效。

此外,WTF是嵌套循環($網站)在做什麼?它看起來像是你的數據沒有正規化,或者你有一個非常糟糕的算法。

+0

Tnx的答案,我也更喜歡選項2,如問題所述。我需要處理來自主服務器的數據(查詢結果),並將其插入許多不同的服務器($ site - 是我需要插入數據的服務器),歡迎使用alghorithem升級 –

+0

我也檢查過它和symcbean是正確的,我在選擇數據之後和fetch_array之前關閉了連接,$ res仍然有數據。 TNX。 –

+0

如果您要將數據複製到其他數據庫,那麼您可能會考慮使用聯合引擎,以便數據直接在PHP的控制下發送,而不是通過PHP – symcbean