用一个巨大的数组填充表

时间:2012-04-28 05:03:12

标签: php mysql database arrays insert

我正在尝试使用我从网页上抓取的内容填充表格。问题是,同时插入了近20万件物品,打破了系统。我得到了错误:

  

警告:mysql_query()[function.mysql-query]:MySQL服务器在第15行的C:\ xampp \ htdocs \ testing \ scrabble2.php消失了

     

警告:mysql_query()[function.mysql-query]:在第15行的C:\ xampp \ htdocs \ testing \ 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);
?>

那么如何用如此庞大的数组填充表格呢?

3 个答案:

答案 0 :(得分: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 :(得分: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');

答案 2 :(得分:0)

为什么MySQL服务器会消失。

  

如果向服务器发送不正确或太大的查询,则可能会收到这些错误。如果 mysqld 收到的数据包太大或无序,则会假定客户端出现问题并关闭连接。如果您需要大查询(例如,如果您正在处理大型BLOB列),则可以通过设置服务器的max_allowed_packet变量来增加查询限制,该变量的默认值为 1MB 。您可能还需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参见第C.5.2.10节,“数据包太大”

Source link

这可能是也可能不是你问题的答案,但我认为这是最可能的原因。