1

ページからスクレイピングしたコンテンツをテーブルに入力しようとしています。問題は、20 万近くのアイテムが同時に挿入され、システムが壊れていることです。エラーが発生します:

警告: mysql_query() [function.mysql-query]: MySQL サーバーが C:\xampp\htdocs\testing\scrabble2.php の 15 行目に移動しました

警告: mysql_query() [function.mysql-query]: C:\xampp\htdocs\testing\scrabble2.php 行 15 の結果セットのヘッダーの読み取りエラー

アイテムを追加できませんでした: 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);
?>

では、このような大きな配列をテーブルに入力するにはどうすればよいでしょうか?

4

3 に答える 3

1

MySQLextended insertsを使用すると、クエリの数が大幅に削減されます。

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

一度に 1 つの挿入物に 1000 語をループしてグループ化することができます。

MySQL 接続タイムアウトを増やすこともできます。

ini_set('mysql.connect_timeout', 300); // seconds
ini_set('default_socket_timeout', 300);
于 2012-04-28T05:07:34.110 に答える
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');
于 2012-04-28T05:08:43.910 に答える