PDOStatement->fetchのループ中でクエリーを発行できない
Tags: PHP
2010/06/23 03:52
PDOStatement->fetchによるループの中で、さらにクエリーを発行できないよってメモ。
コード例。
while(($row = $pdo->fetch()) !== false){
$id = $row['id'];
$address = $row['address'];
$log->debug("id=$id, address=$address");
$loc = $gm->get_locations(array('address' => $address));
if ($loc == 0) {
$log->fatal("google response some error.");
break;
} elseif ($loc == 1) {
$log->error("status=OVER_QUERY_LIMIT");
break;
}
$log->debug("lat={$loc['lat']}, lng={$loc['lng']}");
$station = $hr->get_stations($loc);
$stationName = $station['name'];
$lineName = $station['line'];
$log->debug("station=$stationName, line=$lineName");
$query = "UPDATE joboffer SET station_name = '$stationName', line_name = '$lineName', latitude = {$loc['lat']}, longitude = {$loc['lng']} WHERE id = $id";
$pdo->exec($query);
$log->debug($query);
$affected++;
sleep($interval);
break;
}
要するに、fetchの途中に更にクエリーを発行することは出来ませんという仕様。
改善するには、
- fetchAll()してしまう。
(いや、メモリーが・・・) - fetchでループをせずに、idをfor文でまわすなどして逃げる
くらいしか思いつかない。
良い回避策、改善策はないんでしょうか。
