-1

現在の日付から指定された日付範囲内にある 4 つの特定の列のいずれかに含まれるすべてのエントリを取得する関数を作成しています。すなわち。列には有効期限が含まれており、現在の日付から 30、60、90 日以内に有効期限が切れるエントリを表示できるようにしたいと考えています。私はそれを正しくするのに少し苦労しています。あなたが提供できる助けがあれば幸いです。また、準備されたステートメントと PDO の講義を私に与えないでください。私はそれとその必要性を十分に認識していますが、これは外部消費用ではないため、SQL インジェクションは問題ではなく、これを複雑にしすぎると逆効果になります。 .

これが私がこれまでに持っているものです。

// list_entries_set function lists all entries expiring in the next $days
function list_entries($days) {
    if(!$days) $days = "365";

    $today = date('Y-m-d');
    $end_day = strtotime(date("Y-m-d", strtotime($end_day)) . " + '.$days.'day");

    db_connect();

    $orderby = $_GET["orderby"];
    $sql = mysql_query("SELECT * FROM table WHERE column BETWEEN ".$today." AND ".$end_day."  ORDER BY ".$orderby);

    while($row = mysql_fetch_array($sql)) {
        echo "table outputs : purged because it's irrelevant and lengthy";
    }

    echo "</table>";
    db_disconnect();
}
4

2 に答える 2

1
SELECT * FROM table WHERE column BETWEEN NOW() AND NOW() + INTERVAL :duration DAY LIMIT ORDER BY :order;

プレースホルダーを解決するには、準備済みステートメント対応のエンジンを使用します。ext/mysqlもはやオプションではありません。

于 2013-02-10T03:00:34.687 に答える
0

現在の日付から 30 日、60 日、または 90 日以内に有効期限が切れるエントリの sql は次のようになります。

select item
, case when datediff(expiry_date, current_date) <= 30 then 'within 30'
when datediff(expiry_date, current_date) <= 60 then 'within 60'
else 'within 90'
end whatever_you_want_to_call_this
from your_tables_joining_if_necessary
where expiry_date >= current_date
and expiry_date < date_add(current_date, 91, days)

mysql の構文が正しくない可能性があります。私はそれを扱っておらず、単にマニュアルを見ていました。

于 2013-02-10T03:57:10.107 に答える