0
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 つずつ正しく取得されます。その後、すべてのレコードが更新されたら ( count0 から 1 に)、Sequel Pro を介してデータベース レコードを更新します ( count1 から 0 に)。not found奇妙なことに、プログラムはスリープ ループで表示され続けます。

ただし、プログラムをctrl-cして再起動すると。レコードが再び見つかります。私のコードで何が問題になっていますか?

データベース接続のセットアップ:

  $this->db = new mysqli('127.0.0.1', 'username', 'password', 'sendmsg');
  $this->db->autocommit(FALSE);
4

1 に答える 1

0

$found = $stmt->fetchAll();

これを試して

于 2012-11-20T10:15:44.350 に答える