我正在尝试用从页面中刮来的内容填充一个表。问题是,有近20万个项目同时被插入,破坏了系统。我知道错误是:
警告: mysql_query() function.mysql-query: MySQL服务器在第15行的C:xampp\htdocs\testing\scbble2.php中消失了 警告: mysql_query() function.mysql-query:在第15行C:\xampp\htdocs\testing\scbble2.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);
?>那么,如何用这样大的数组填充我的表呢?
发布于 2012-04-28 05:07:34
使用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);发布于 2012-04-28 05:08:43
尝试像这样使用insert:
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-28 05:12:27
为什么MySQL服务器会消失。
如果向服务器发送不正确或过大的查询,则可以获得这些错误。如果mysqld接收到的数据包太大或不正常,它假设客户端出了问题并关闭了连接。如果需要大查询(例如,如果使用大BLOB列),可以通过设置服务器的
max_allowed_packet变量来增加查询限制,该变量的默认值为1MB。您还可能需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参见C.5.2.10,“包太大”节。
这可能是也可能不是你的问题的答案,但我认为这是最可能的原因。
https://stackoverflow.com/questions/10360751
复制相似问题