0

PHP と MySQL を使用して、最近作成したフォーラム用のフラッド フィルターを作成しています。これについて調査しましたが、結果はほとんど得られず、そのうちの 1 つだけが私の解決につながる可能性がありました。

これがコードです

$overview_threads = mysql_query("SELECT * FROM `forum_posts` WHERE `author`='".$_SESSION['username']."' AND TIMESTAMPDIFF(SECOND, `created`, now()) <= 20");

このコードは、ユーザーが 20 秒以内に作成したスレッドを選択し、if ステートメントを実行して、ユーザーがその時間内に投稿できないようにします。

このために私は何をしますか?

4

1 に答える 1

1

まず、おそらくDATE_SUB()これを使用する必要があります。これは、よりインデックスに適しているためです(createdもちろん、インデックスが必要です) 。

SELECT * FROM `forum_posts`
WHERE `author` = ?
AND `created` >= DATE_SUB(NOW(), INTERVAL 20 SECONDS)

次に、レコードがあるかどうかを判断するには、結果セットを確認する必要があります。

$result = mysql_query($query); // query is that shown above
if (false === $result) {
    echo mysql_error();
} else if (mysql_num_rows($result) > 0) {
   // you found a match
}

第三に、関数の代わりにmysqliorを使用することを実際に検討する必要があります。これらは非推奨であるためです。PDOmysql_*

于 2013-05-08T23:54:57.150 に答える