0

私は、訪問者がアカウントを作成できるサイトで働いています。そのためには、プロセスの最後に電子メール アドレスを確認する必要があります。

アカウントが作成される前に、電子メール、パスなどの入力された値は一時的に特別なテーブルに保持されます。つまり、訪問者は 1 時間以内に電子メールを開いてリンクをクリックする必要があります。そうしないと、その行が削除され、ボットや悪人、または単純に怠け者からの「ゴミ」を防ぐことができます。

私のアイデアは、ユーザーが混乱を解消できるようにすることでした。これがその方法です。ユーザーが送信されたリンクをクリックすると、一時的に保存された値を含むテーブルの行がメンバーの実際のテーブルに移動し、別の関数がクリーンアップします「古い」行、つまり 1 時間以上前に挿入された行を表示します。

これは私の現在のコードです:

$stmt3 = $dbc->prepare('DELETE FROM temp_storage WHERE time() - time > 3600');
$stmt3->execute();

(時刻は、行が挿入された時刻が格納される列です)

ただし、このコードは明らかに機能していません。SELECT FROM temp_storage を使用して回避策を実行し、行が挿入されてから時間が経ちすぎていないかどうかを確認できることはわかっていますが、なぜこのようにできないのでしょうか?

今私の質問は、そうですか、それとも間違った方法でやっていますか?

4

4 に答える 4

3

TIME()MySQL では、現在の時刻は表示されません。タイムスタンプから「時刻部分」が取り除かれます。UNIX_TIMESTAMP()おそらくそれがタイムスタンプをテーブルに保存する方法である場合は、別の時間関数を探しています。

ここで MySQL の日付と時刻の関数を確認してください: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

于 2012-08-16T16:30:23.747 に答える
1

これを試して:

$stmt3 = $dbc->prepare('DELETE FROM temp_storage WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(time) > 3600');
于 2012-08-16T16:34:05.520 に答える
1

現在の時刻を取得するために使用している関数が正しくありません。そうじゃtime()ないnow()

戻り値を確認すると$pdo->errorInfo()、エラー メッセージが表示されます。

i get what you want to doについてのコメントを踏まえて、echo time()それが機能するためには、次のように記述しておく必要があります。

$stmt3 = $dbc->prepare('DELETE FROM temp_storage WHERE '.time().' - time > 3600');
$stmt3->execute();

これを行うことで、PHP のtime()関数の戻り値を使用して文字列を作成し、それを MySQL に送信してクエリとして実行します。

PHP レルムと SQL レルム コードの違いを理解する必要があります。

PHP はテキスト文字列のみを構築します。さまざまな単語と文字をつなぎ合わせて文字列を構成します。PHP は、その文字列が何のためにあるのかさえ気にしません。

PHP はその文字列を調べて、「これは良い SQL クエリです」と言うことができません。

できることは、作成したテキストを SQL サーバーに送信することです。SQL サーバーは、正しい SQL 言語ステートメントであるのようにテキストを実行しようとします。

エラーが発生した場合は、エラーを PHP に報告し、そうでない場合は結果を PHP に返します。いずれにせよ、SQL ステートメントは文字列であり、実際にサーバーに送信される前に構成されます。

文字列を "中断" して別の文字列を連結する"me"."&"."you"ことは、SQL サーバーに送信する前に文字列を構築するプロセスの一部にすぎません。

于 2012-08-16T16:31:28.200 に答える
0

entry_dt列は列だと思いdatetimeます。

where CURRENT_TIMESTAMP - interval 1 HOUR > entry_dt

列にSQL関数やキーワードと同じ名前を付けることは避けてください

ref http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

于 2012-08-16T16:33:22.073 に答える