-2

(シーカー、ドナー、日付)列とタイプ(日時)の日付列を持つnotifyという名前のテーブルが

あり、次の形式YYYY-MM-DD HH:MM:SS

を保存します最新の日付で1レコードを選択しようとしています通知テーブルから、日付を現在の日付と比較し、2 つの日付の間の日数を計算します。

<?php

session_start();
$email = $_GET['email'];
date_default_timezone_set('Asia/Riyadh');
$time = date("Y-m-d H:i:s");

$note = "SELECT * FROM notify WHERE seeker='".$_SESSION['email']."'AND donor='".$email."' ORDER_BY `date` DESC LIMIT 1";
$st = $conn->prepare($note);
$st->execute();

if($found = $st->fetch(PDO::FETCH_ASSOC)){
    $now = $time;
    $old_date = strtotime($found['date']);
    $dateif = $now - $old_date;

    if(floor($dateif/(60*60*24)) >= 7){
    echo "the difference between tow dates is 7 days or more";
    } else { echo "difference between tow dates is less than 7 days";}
}
?>


コードが機能していません!
通知テーブルには、日付 2013-04-22 09:15:47 のこの値を持つレコードが 1 つしかありません

4

8 に答える 8

1

あなたのdate列は存在しないので、列で並べても意味がありません。$_SESSION['email']また、セキュリティで保護されていない場合は、SQL インジェクションにさらされます。

したがって、正しい形式は、準備済みステートメントを使用し、右側の列で並べ替えることです。(PDO を仮定すると、mysqli も使用できます):

/** @var PDO $pdo - Assuming a PDO connection. */
$query = "SELECT * FROM `user` WHERE `ID` = :email ORDER BY `time` DESC";
$stmt = $pdo->prepare($query);
$stmt->execute(array($_SESSION['email']));

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); //Get all results in an associated array form.
于 2013-04-23T05:38:10.897 に答える
1

ジャックの答えは、準備されたステートメントを正しく使用する方法を示しています。を使用して日付計算を簡略化するコードを次に示しますDATEDIFF()

$note = "SELECT *, DATEDIFF(NOW(), `date`) AS date_diff
         FROM notify 
         WHERE seeker=:seeker AND donor=:donor
         ORDER_BY `date` DESC
         LIMIT 1";

$st = $conn->prepare($note);
$st->execute(array(
    ':seeker' => $_SESSION['email'],
    ':donor' => $email,
);

$row = $st->fetch(PDO::FETCH_ASSOC);
// do something with $row
于 2013-04-23T07:50:14.020 に答える
0

データベースから最新の日付を取得するには、次の SQL クエリを実行してみてください

$query="SELECT * FROM user WHERE ID='".mysql_real_escape_string($_SESSION[email])."' ORDER_BY date,time desc limit 1";
于 2013-04-23T05:40:40.937 に答える
0

あなたはここで日付の周りに ` を忘れました。date は mysql の予約語です。

列名として使用する場合は、` で囲みます。

編集

また、余分なスペースがありますので、それを削除してください

$note = "SELECT * FROM notify WHERE seeker='".$_SESSION['email']. "' 
AND donor='".$email."' ORDER_BY `date` LIMIT 1";
于 2013-04-23T07:29:49.147 に答える
0

降順で注文しようとしましたか?以下に示すように:

$note = "SELECT * FROM notify 
           WHERE
           seeker=' ".$_SESSION['email']. " ' 
           AND
           donor=' ".$email." ' ORDER_BY date DESC LIMIT 1";
于 2013-04-23T07:30:04.217 に答える
0

変数を文字列に添付する場合は、ドットを使用してそれらを連結する必要があり、order by は where 条件の後に来て、$_SESSION 内で引用符を逃しました

$query = "SELECT * FROM user WHERE ID='".$_SESSION['email']."' ORDER_BY date, time";
于 2013-04-23T05:32:39.937 に答える