好的,所以我有一个超过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内部服务器错误。
答案 0 :(得分:1)
UPDATE `table_name` SET `bind`=`id`