function GetMessageFromDB(&$id, &$phone, &$message)
{
$found = FALSE;
$stmt = $this->db->prepare('SELECT id, phone, message FROM messages WHERE count <= 0 LIMIT 1');
$stmt->execute();
$stmt->bind_result($id, $phone, $message);
$found = $stmt->fetch();
$stmt->close();
echo("GetMessageFromDB: ... ");
if ($found) {
echo("found\n");
$this->db->query("UPDATE messages SET `count`=count+1 WHERE `id`=$id");
$this->db->commit();
} else {
echo("not found\n");
}
return $found;
}
function SendAll()
{
while (true) {
$found = $this->GetMessageFromDB($id, $phone, $message);
while ($found) {
# $this->DoSomething($phone, $message);
$found = $this->GetMessageFromDB($id, $phone, $message);
}
echo("sleep ...\n");
sleep(10);
}
}
を実行するSendAll()
と、DB から結果が 1 つずつ正しく取得されます。その後、すべてのレコードが更新されたら ( count
0 から 1 に)、Sequel Pro を介してデータベース レコードを更新します ( count
1 から 0 に)。not found
奇妙なことに、プログラムはスリープ ループで表示され続けます。
ただし、プログラムをctrl-cして再起動すると。レコードが再び見つかります。私のコードで何が問題になっていますか?
データベース接続のセットアップ:
$this->db = new mysqli('127.0.0.1', 'username', 'password', 'sendmsg');
$this->db->autocommit(FALSE);