私は同時に10のPHPスクリプトを実行しており、Linuxのバックグラウンドで処理しています。例については同時に複数のPHPスクリプトを実行する(データベースループの問題)
:run-process.php
で
while ($i <=10) {
exec("/usr/bin/php-cli run-process.php > /dev/null 2>&1 & echo $!");
sleep(10);
$i++;
}
、私はデータベースループに問題を抱えています。 1つのプロセスが既にstatus
フィールドを1に更新している可能性があります。他のPHPスクリプトプロセスがそれを見ていないようです。例:
$SQL = "SELECT * FROM data WHERE status = 0";
$query = $db->prepare($SQL);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$SQL2 = "SELECT status from data WHERE number = " . $row['number'];
$qCheckAgain = $db->prepare($SQL2);
$qCheckAgain->execute();
$tempRow = $qCheckAgain->fetch(PDO::FETCH_ASSOC);
//already updated from other processs?
if ($tempRow['status'] == 1) {
continue;
}
doCheck($row)
sleep(2)
}
どのようにしてプロセスが同じデータを再度やり直さないようにするには?
mysqlトランザクションを使用してください。 例:http://stackoverflow.com/questions/2708237/php-mysql-transactions-examples –
クエリにパラメータがない場合、 'prepare()'を呼び出すだけで不必要なオーバーヘッドが追加されます。代わりに、 '$ db-> exec($ SQL);' –