从命令行运行PHP脚本时内存不足

从命令行运行PHP脚本时内存不足,php,Php,我有一个PHP脚本,我试图从命令行运行一次,以修复MySQL数据库中的一些值。所以它运行了很多查询。我运行它,它会运行一段时间,直到内存耗尽。运行包含大量MySQL查询的PHP脚本时会出现这种情况,还是因为某种内存泄漏 $statement = 'SELECT users.language, users.created AS user_created, posts.created, posts.id, blogs.user_id, posts.blog_id FROM users

我有一个PHP脚本,我试图从命令行运行一次,以修复MySQL数据库中的一些值。所以它运行了很多查询。我运行它,它会运行一段时间,直到内存耗尽。运行包含大量MySQL查询的PHP脚本时会出现这种情况,还是因为某种内存泄漏

$statement = 'SELECT users.language, users.created AS user_created, 
    posts.created, posts.id, blogs.user_id, posts.blog_id FROM users
    JOIN blogs ON users.id = blogs.user_id
    JOIN posts ON blogs.id = posts.blog_id
    ORDER BY users.id
    LIMIT %d, %d';

$limit = 100;
$page = 0;
$rows = array();

while($page == 0 || !empty($rows)) {
    echo 'Fixing posts ' . ($page * $limit + 1) . ' to ' . ($page * $limit + $limit + 1) . "\n";
    $rows = $db->prepare($statement)
            ->bindValue($page * $limit)
            ->bindValue($limit)
            ->execute();

    foreach($rows as $row) {  /*Do a bunch of stuff to fix the data*/ }
    $page++;
}

编辑:我加入了一个回音记忆\u获取\u用法,\n;在$page++之前,我尝试注释掉我在for循环中执行的查询,发现内部查询在每个循环中占用了额外的内存,而这些内存没有重新分配。

如何绑定到限制中的%d,%d个值?是否使用自定义db抽象库?$db是自定义类。一般来说,不应该在循环中准备select语句。在循环外准备/绑定一次,然后在循环内根据需要多次重新执行。像那样重新准备是浪费资源,并且否定了准备好的陈述的主要好处之一。@MarcB很好,尽管它实际上不是一个准备好的陈述。我没有编写的自定义类只是调用函数prepare,但遗憾的是,这是为运行PHP5.1的服务器编写的@凯:没关系。mysqli的prepare从5.0开始使用PHP,从5.1.0开始使用PDO。如果这实际上是在幕后使用mysql,那么您就有一个更大的问题。