2012-04-28 72 views
1

我正試圖用我從頁面中抓取的內容填充表格。問題是,近二十萬件物品被同時插入,破壞了系統。我得到的錯誤:用巨大的數組填充表格

警告:請求mysql_query()[function.mysql查詢]:MySQL服務器已消失在C:\ XAMPP \ htdocs中\第15行測試\ scrabble2.php

警告:請求mysql_query()[function.mysql查詢]:錯誤讀取結果集的C頭:\ XAMPP \ htdocs中\上線15

不能添加項測試\ scrabble2.php:MySQL服務器已消失

<? 
include('simple_html_dom.php'); 
$html = new simple_html_dom(); 
$html->load_file('http://kisa.ca/scrabble/'); 
$collection = $html->find('.words'); 
$con = mysql_connect("localhost","root","root") or die('Could not connect: ' . mysql_error()); 
mysql_select_db('test') or die('Could not select database: ' . mysql_error()); 
foreach ($collection as $word) 
{ 
    $add_item = "INSERT INTO ScrabbleWords (ID, Words) VALUES ('', '" . $word . "')"; 
    mysql_query($add_item) or die('Could not add item: ' . mysql_error()); 
    echo $word; 
    echo ", "; 
} 
echo "Done"; 
mysql_close($con); 
?> 

那麼我怎麼能用這麼大的數組填充我的表?

+0

只要我看到問題和「拼字遊戲」這個詞,我就笑哈哈。 – Menztrual 2012-04-28 05:04:03

+1

MySQL服務器不應該只是'走開' - 檢查mysql_error的日誌輸出...可以在/ var/log/mysql/mysql_error中找到(默認情況下) – philwinkle 2012-04-28 05:09:43

+0

如果你只是想拼字單詞列表,所以你可以加載它與本地LOAD DATA你可以在這裏得到它們:http://www.edcollins.com/jamble/或http://www.isc.ro/lists/twl06.zip – effulge 2012-05-11 04:42:43

回答

1

使用MySQL extended inserts,這將大大降低查詢的次數:

INSERT INTO ScrabbleWords (ID, Words) VALUES ('', 'Word1'), ('', 'Word2'), ('', 'Word3'), ...; 

可以遍歷和小組一起說1000個字到一個刀片上的時間。

還可以增加MySQL連接超時:

ini_set('mysql.connect_timeout', 300); // seconds 
ini_set('default_socket_timeout', 300); 
+1

這個建議將帶你從200,000 INSERT語句到200個插入語句(假設你每次做1000個單詞) – GDP 2012-04-28 05:10:09

+0

如果我知道你的意思,這似乎是最優雅的答案。原諒我的無知,我的追求是真誠的。如何循環這些詞的分組?將它們分組後,每個組都存儲在一個變量中?在你的例子中,'Word1','Word2'等的值是什麼? – Stackings 2012-04-28 14:40:52

0

嘗試使用插入這樣的:

INSERT INTO example 
    VALUES 
    (100, 'Name 1', 'Value 1', 'Other 1'), 
    (101, 'Name 2', 'Value 2', 'Other 2'), 
    (102, 'Name 3', 'Value 3', 'Other 3'), 
    (103, 'Name 4', 'Value 4', 'Other 4'); 
0

爲什麼MySQL服務器消失。

如果向錯誤或過大的服務器發送查詢,則可能會出現這些錯誤。如果mysqld收到的數據包太大或失序,則認爲客戶端出現問題並關閉連接。如果您需要大量查詢(例如,如果您使用的是大BLOB列),則可以通過設置服務器的max_allowed_packet變量(缺省值爲1MB)來提高查詢限制。您可能還需要增加客戶端上的最大數據包大小。有關設置數據包大小的更多信息,請參見部分C.5.2.10,「數據包太大」

Source link

這可能是也可能不是回答你的問題,但我認爲這是最可能的原因。