我在同一時間運行10個PHP腳本,並在Linux上在後臺處理它。同時運行多個PHP腳本(數據庫循環問題)
例如:
while ($i <=10) {
exec("/usr/bin/php-cli run-process.php > /dev/null 2>&1 & echo $!");
sleep(10);
$i++;
}
在run-process.php
,我有數據庫循環問題。其中一個進程可能已經將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);' –