php mysql多upade和内部服务器错误

时间:2013-08-11 09:57:56

标签: php mysql pdo

好的,所以我有一个超过130,000行的mysql表 我想要做的是“重新生成”桌子。我有一个名为bind的列,我希望它与id(这是索引)相同。对于初始设置,绑定需要与id相同。就那么简单。使用的代码如下。我正在使用PDO,类和函数。

$time_start = microtime(true); 
try{
    $sql = "SELECT * FROM `table_name`";
    $STH = $this->dbConn()->query($sql);
    $STH->execute();
    while($row = $STH->fetch(PDO::FETCH_OBJ)){
        if($row->id != $row->bind){
            $query = "UPDATE `table_name` SET `bind`=? WHERE `id`=?;";
            $STH2 = $this->dbConn()->prepare($query);
            $STH2->execute(array($row->id, $row->id));
        }
    }
} catch(PDOException $e) {
    $this->errorLog($e->getMessage());
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;
echo '<br /><b>Total Execution Time:</b> '.$execution_time.' Mins';

这是我执行的代码的一部分。 $ this-&gt; dbConn()是我的基类中用于数据库连接的对象。

问题1.更新部分执行时间过长。但是,如果我只回显更新声明,则需要几秒钟。

问题2.执行时出现500内部服务器错误。不是max_execution_time限制。脚本在后台以某种方式执行。我有报告设置为E_ALL,php.ini display_errors = On,我在/ etc / php5-frm日志文件的/ etc / logs / apache2中的日志文件中找不到任何错误。

解决但有一些错误。也许我是个白痴。

while($row = $STH->fetch(PDO::FETCH_OBJ)){
            if($row->id != $row->bind){
            $query[] = "UPDATE `table_name` SET `bind`=`id`";
            }
        }
        $query = implode(';',$query).';';
        $STH2 = $this->dbConn()->exec($query) ; 

如果声明以';'结束,PDO知道批量插入。
我对while循环做了一些修改来构建一个数组,然后内爆数组来构建sql语句 尽管如此,脚本在几秒钟内执行,这非常好,但脚本没有结束。你能看到我的代码中有任何缺陷吗?代码正常执行,数据库更新,所有130000多行但脚本在约5分钟后给出了500内部服务器错误。

1 个答案:

答案 0 :(得分:1)

UPDATE `table_name` SET `bind`=`id`