私はmysqlからレコードを引き出すためにwhileループを使用しています。これは、事故でジャッキアップされたログをリセットするためです。そのため、DBのバックアップからIDとタイムスタンプを取り出し、これらの値で本番表を更新することで、以前のレコードを修正しています。PHPのメモリ使用中whileループ
このログテーブルには12,545,628個のレコードがあるため、メモリ使用量を制限し、このソリューションの使用を制限したいと考えていました。 IDとタイムスタンプのフィールドだけを引っ張って、1GBのメモリをすばやくバストします。
これは、一度に1つのレコードにメモリ使用量を制限しているのですか、それともすべてのIDとタイムスタンプをまっすぐに引き出し、
(PDOは奇妙に見えるかもしれませんので、私は、データベースクラスの設定をしました)
$sql = 'SELECT id, timestamp FROM log_people WHERE 1';
$Test->sqlQuery($sql);
while ($testdb = $Test->sth->fetch(PDO::FETCH_ASSOC)) {
$Prod->beginTransaction();
try {
$sql2 = 'UPDATE log_people SET timestamp = "'.$testdb['timestamp'].'" WHERE id = '.$testdb['id'];
$Prod->sqlQuery($sql2);
} catch (exception $err) {
$Prod->rollback();
echo $err->getMessage();
}
}
は私だけ一度に一つのレコードを引っ張って変更するには、以下のコードを実行されるべきか?あなたの問題で
while ($count < 12545628){
$sql = 'SELECT id, timestamp FROM log_people WHERE id ='.$count;
$Test->sqlQuery($sql);
$testdb = $Test->sth->fetch(PDO::FETCH_ASSOC)
$Prod->beginTransaction();
try {
$sql2 = 'UPDATE log_people SET timestamp = "'.$testdb['timestamp'].'" WHERE id = '.$testdb['id'];
$Prod->sqlQuery($sql2);
$count++;
} catch (exception $err) {
$Prod->rollback();
//return $err->getMessage();
echo $err->getMessage();
}
}
なぜ、すべてのレコードを「選択」する必要があるのですか?すべてのレコードを更新する必要がある場合 - なぜそれらを選択するのですか? –
バックアップテーブルのコピーを同じDBに置き、SQLを使用して本番テーブルを更新することで、これをずっと簡単に行うことはできませんでしたか?なぜPHPでそれをするのですか? –