2

私の PHP コードには、次の SQL ステートメントがあります。

$query = "UPDATE users SET num_logins = num_logins+1, last_login='$timeStamp' WHERE id = $id";

私は最近、プロジェクト管理者のために num_logins 列を実装して、頻繁に使用するユーザーを確認できるようにしました。ほとんどの場合は機能しているように見えますが、num_logins = 0 で、last_login フィールドのタイムスタンプ値が、変更を実装した日付より後の 2 人のユーザーに気付きました。

num_logins 列のデフォルトはゼロであるため、ログインに成功し、上記のクエリが last_login フィールドを更新する唯一のクエリである場合、last_login フィールドが更新されたときに num_logins がまだゼロであることはどうすればよいでしょうか (どちらのフィールドも更新されません)。コード内の他の場合、私は唯一のデータベース管理者です)?

エンジン=InnoDB。

4

1 に答える 1

1

考慮すべきいくつかのシナリオ:

  1. 更新クエリで $id が適切に一致していますか? たぶん、記録は更新されていません。
  2. num_logins のすべての値が null でないことを確認しますか? 列はヌル可能ですか? デフォルトは 0 ですが、null 値がないことを確認する必要があります。null +何かは常にnullであることを忘れないでください。
  3. コード内でクエリが実際に実行されていることを確認してください。これを確実にするために、いくつかの計測器 (ロギングなど) を追加できますか? クエリがすべてのシナリオで実行されていない可能性があります。
于 2012-04-19T19:48:59.830 に答える