将包含50,000多个条目的数组转换为mysql数据库

时间:2010-07-09 07:31:13

标签: php

好的,所以我正在帮助他们的网站。他们的原始编码器认为将整个数据库放在一个数组中是一个好主意。

我循环遍历数组中的每一段数据并将其插入到我创建的新mysql表中,行插入得很好但问题是php不会让我的脚本执行超过60秒。< / p>

如何覆盖此设置?

5 个答案:

答案 0 :(得分:4)

有一个经典的解决方案,使用set_time_limit(),它允许您设置脚本的最长执行时间(以秒为单位)。

但是,您可能希望通过一个查询插入多行或将数组转换为CSV并使用更快的LOAD DATA。

修改:示例

插入多行:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

参考:http://dev.mysql.com/doc/refman/5.1/en/insert.html

使用LOAD DATA:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

参考:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 1 :(得分:4)

解决方案:

  • 在php.ini中将max_execution_time设置为0或使用set_time_limit()

  • 在命令行运行PHP脚本。 CLI脚本的时间限制已经硬编码为0。

  • 将数组转储到CSV文件中,然后使用LOAD DATA INFILE使数据库导入比在循环中一次插入一行快20倍。

答案 2 :(得分:2)

您可以使用页面顶部的set_time_limit()功能,如下所示:

set_time_limit(0);

答案 3 :(得分:0)

尝试ini_set('max_execution_time', $time_in_seconds);

Source

答案 4 :(得分:0)

如果您使用的是mysqli,我会使用multi_query来批量操作。整个事情会跑得更快。