1

時間切れになった場合にユーザーのキーのアクティブ ステータスを 0 に変更するスクリプトを作成しました。そこから開始するときはstart_time、time(); に設定します。「60」のように何日設定するよりも。

これを行う現在の方法に基づいて、残りの日数、時間数、または分数を計算するにはどうすればよいですか。

$user_info['days'] = "60"

`start_time` = 1332219600


function setup() {
    mysql_connect('localhost', 'stresser_main', 'ZLLAUkuLIUU');
    mysql_select_db('stresser_main');
    $query = mysql_query("SELECT * FROM `keys` WHERE `active`='1'");
    while ($user_info = mysql_fetch_array($query)) {
        $time_ago = strtotime("-" . $user_info['days'] . " day");
        $time_ago_other = strtotime("+" . $user_info['days'] . " day");
        mysql_query("UPDATE `keys` SET `active`='0' WHERE `start_time` < $time_ago AND `id`='" . $user_info['id'] . "'");
    }
}
4

1 に答える 1

0
  1. そのような考えをしないでください。更新クエリのみを実行します。有効期限が切れているアクティブ = 1 のユーザーが 1000 人いる場合、1000 の更新クエリを実行します。このようにして、問題を解決する 1 つのクエリを実行します。select と while は必要ありません。

    mysql_query("UPDATE keys SET active = 0 WHERE active = 1 AND start_time < $something");

  2. のようにSQLですべてを行います'WHERE start_time < NOW()'。また、SQL で計算を行うこともできます。ここには多くの SQL 関数がありますhttps://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html これにより、はるかに高速で安全になります。

  3. mysql_ 関数を使用しないでください。mysqli_ または PDO を使用します。

  4. 整数の UNIX タイムスタンプではなく、テーブルで日時フィールドを使用します。SQL 日付関数を使用できるようになります。

  5. strtotime の代わりに \DateTime() を使用します。

于 2013-03-19T11:49:41.830 に答える