2011-03-15 57 views
0

所以我有一个相当大的〜800,000个成员的数据库查询mysql并为每个成员运行一个脚本。 (大数据库)

我想在数据库上运行一个查询并为每个成员运行一个脚本。

我该怎么做,而不是超时?

这不是为我工作:

$query = 'SELECT * FROM members'; 

$result = mysql_query($query); 

while ($row = mysql_fetch_assoc($result)) { 

//script 

} 
+0

一个字:块。 – orlp 2011-03-15 03:03:33

回答

0

您可以使用set_time_limit(0)这意味着有上的文件正在运行,没有时间限制。

set_time_limit($seconds)参见

的最大执行时间,单位为秒。如果设置为零,则不会施加时间限制。

您运行的其他风险是内存问题。您可以提高内存限制,但是最好使用限制来处理块中的数据,以防止一次加载太多数据。

下面是一个例子:

<?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; 
} 
+0

如果我的托管服务提供商不允许这样的事情? – AndrewFerrara 2011-03-15 03:05:51

+0

我不相信这是可以防止的,除非php运行在安全模式下,并且从5.3 – Jacob 2011-03-15 03:06:53

+0

开始不推荐使用,我怎么会一次只装载100个成员呢? – AndrewFerrara 2011-03-15 03:11:50

相关问题