0

次の 7 日以内に有効期限が切れる一連の ID を取得しようとしていますが、私の人生では、クエリを機能させることができません

   $target_date = date('Y-m-d', strtotime('+7 days'));
   $sql = "SELECT subscriptions.`id` FROM subscriptions WHERE date($target_date) <= expires AND cust_id =$_SESSION[uid]";

どんな助けでも大歓迎です

4

3 に答える 3

1

これは問題ありません:

$target_date = date('Y-m-d', strtotime('+7 days'));

MySQLと同じ方法で日付を構造化するため[YYYY-MM-DD]

クエリを切り替えて、DATE()関数を「有効期限」フィールドに適用し$target_dateましたが、必要がないため、あなたのフィールドには適用しませんでした。有効期限フィールドが[YYYY-MM-DD HH:MM:SS]フォーマットされている可能性があるため、機能していない可能性があります。

$sql = "
SELECT subscriptions.id 
FROM subscriptions 
WHERE DATE(expires) >= '$target_date' 
AND cust_id = '$_SESSION[uid]'";

クエリをエコーアウトして、$sqlクエリが適切に実行されているかどうかを確認し、を使用して、or die(mysql_error());失敗した場所を教えてください。

別の回答で概説されているように、SQLエスケープも使用します(PDOまたはmysqliのいずれか)。

お役に立てれば。

于 2012-10-25T19:01:20.763 に答える
1

MySQL とほぼ互換性のある形式で日付を作成すると、DATE関数を使用しなくても機能するはずです。文字列であるかのように比較するだけです。

あなたのコードは、この問題を解決するための適切なSQL エスケープを緊急に必要としています。

PDO またはで実行されているクエリは、mysqliおおよそ次のようになります。

$target_date = date('Y-m-d', strtotime('+7 days'));
$sql = "SELECT subscriptions.`id` FROM subscriptions WHERE ?<=expires AND cust_id=?";

次に、適切なメソッドを呼び出して、適切なbind_param値をそれらのプレースホルダーにリンクできます。

于 2012-10-25T18:47:28.627 に答える
1

MySQLでそれを行うことができます:

SELECT subscriptions.`id` FROM subscriptions WHERE date_add(curdate(),interval 7 day) <= expires AND cust_id =$_SESSION[uid]
于 2012-10-25T19:03:02.163 に答える