11

私はかなり検索しましたが、うまくいかず、理由がわからない解決策をいくつか見つけました。

タイムスタンプ列のあるテーブルがあります。この列のMySQLタイプは「datetime」です。このテーブルにPHPから次のものを挿入します。

date('Y-m-d H:i:s')

これは、MySQL日時の正しい値のように見えます。

2012-06-28 15:31:46

この列を使用して、たとえば10分より古い行を削除したいと思います。次のクエリを実行していますが、機能していません。0行に影響します。

DELETE FROM adminLoginLog WHERE timestamp < (NOW() - INTERVAL 10 MINUTE);

誰かが私が間違っていることと、なぜそれが正しく機能していないのかについていくつかの光を当てることができますか?

ありがとう。

4

5 に答える 5

18

TIMESTAMP() は現在のタイム スタンプを返す組み込み関数であるため、クエリが結果を返すことはありません。

予約語ではなく、列を意味していることを MySQL に知らせるために、列をバック ティックでラップしてみてください。

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE);
于 2012-06-28T20:58:46.527 に答える
4

timestampmysqlで予約されているキーワードです。フィールド名として使用するtimestampには、以下に示すように、それをバッククォートに入れる必要があります。

`timestamp`

time_createdがUNIXタイムスタンプ(int)の場合、次のようなものを使用できるはずです。

DELETE FROM adminLoginLog WHERE `timestamp` < (UNIX_TIMESTAMP() - 600);

(600秒= 10分-明らかに)

それ以外の場合(time_createdがmysqlタイムスタンプの場合)、これを試すことができます:

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE)

アップデート1

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( CURRENT_TIME(), INTERVAL 10 MINUTE)

アップデート2

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( NOW(), INTERVAL 10 MINUTE)

デモ

于 2012-06-28T21:08:55.650 に答える
0

タイムスタンプをphpで生成し、それをmysqlクエリに渡します。

$date = new DateTime();
$date->modify("-10 minutes")
于 2012-06-28T21:02:50.947 に答える
0

クエリは正しいです。phpmyadmin にアクセスできる場合は、SQL コンソールでコマンドを実行すると、詳細情報が得られます。

于 2012-06-28T21:17:59.747 に答える
0

PHPコード:

//Your Database Details

$conn = mysqli_connect("localhost","root","","tifu");

//Actual Core thing

$delete_otp = mysqli_query($conn,"DELETE FROM temp_project_member_details WHERE create_at < ('" . date("Y-m-d H:i:s"). "' - INTERVAL 10 MINUTE)"); 

注 : ここで temp_project_member_details : データベース tifu のテーブル名

および create_at : 同じ関数を使用して格納された日付と時刻を持つテーブル temp_project_member_details 内のフィールド名'" . date("Y-m-d H:i:s"). "'

Deleting After 10 minutes コードのスクリーンショット

回答で説明されているように、テーブルの create_at フィールドに日付と時刻を格納するスクリーンショット

于 2019-01-01T14:36:51.187 に答える