所以我有一个相当大的〜800,000个成员的数据库查询mysql并为每个成员运行一个脚本。 (大数据库)
我想在数据库上运行一个查询并为每个成员运行一个脚本。
我该怎么做,而不是超时?
这不是为我工作:
$query = 'SELECT * FROM members';
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
//script
}
所以我有一个相当大的〜800,000个成员的数据库查询mysql并为每个成员运行一个脚本。 (大数据库)
我想在数据库上运行一个查询并为每个成员运行一个脚本。
我该怎么做,而不是超时?
这不是为我工作:
$query = 'SELECT * FROM members';
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
//script
}
您可以使用set_time_limit(0)
这意味着有上的文件正在运行,没有时间限制。
的最大执行时间,单位为秒。如果设置为零,则不会施加时间限制。
您运行的其他风险是内存问题。您可以提高内存限制,但是最好使用限制来处理块中的数据,以防止一次加载太多数据。
下面是一个例子:
<?php
$start = 0;
$size = 100;
while(true) {
$query = sprintf('SELECT * FROM members LIMIT %d,%d', $start, $size);
$result = mysql_query($query);
if (mysql_num_rows($result) == 0)
break;
while ($row = mysql_fetch_assoc($result)) {
//script
}
mysql_free_result($result);
$start += $size;
}
如果我的托管服务提供商不允许这样的事情? – AndrewFerrara 2011-03-15 03:05:51
我不相信这是可以防止的,除非php运行在安全模式下,并且从5.3 – Jacob 2011-03-15 03:06:53
开始不推荐使用,我怎么会一次只装载100个成员呢? – AndrewFerrara 2011-03-15 03:11:50
一个字:块。 – orlp 2011-03-15 03:03:33