ORDER_BY date LIMIT 1

У меня есть таблица с именем notify с колонками (поиск, донор, дата)

столбец даты типа (datetime) и сохраняет следующий формат: YYYY-MM-DD HH: MM: SS

Я пытаюсь записать 1 запись с последней датой из таблицы уведомлений, а затем сравнить дату с текущей датой и рассчитать количество дней между датами буксировки.

<?php session_start(); $email = $_GET['email']; date_default_timezone_set('Asia/Riyadh'); $time = date("Ymd 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

Solutions Collecting From Web of "ORDER_BY date LIMIT 1"

Прежде всего, вы должны использовать подготовленные заявления следующим образом:

 $note = "SELECT * 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, ); 

Без держателей мест вы все еще открыты для SQL-инъекций.

Во-вторых, вы не можете сравнивать строку с целым числом следующим образом:

 $now = $time; // string $old_date = strtotime($found['date']); // integer $dateif = $now - $old_date; // dunno? 

Вы должны сравнить яблоки с яблоками:

 $seven_days_ago = strtotime('-7 days'); $old_date = strtotime($found['date']); if ($old_date > $seven_days_ago) { echo "difference between tow dates is less than 7 days"; } else { echo "the difference between tow dates is 7 days or more"; } 

Поскольку столбца date не существует, нет смысла его заказывать. Кроме того, вы подвергаетесь SQL-инъекции в случае, когда $_SESSION['email'] не защищен.

Таким образом, правильная форма заключалась бы в том, чтобы использовать подготовленные операторы, а также порядок в правой колонке. (предполагая 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. 

Ответ Джека показывает, как правильно использовать подготовленные заявления. Вот код для упрощения расчета даты с помощью 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 

Если вы затягиваете какие-либо переменные в строку, тогда вам нужно их конкатенировать с помощью точки, а другой – после того, как условие и внутри $ _SESSION вы пропустили кавычки

 $query = "SELECT * FROM user WHERE ID='".$_SESSION['email']."' ORDER_BY date, time"; 

Чтобы получить последнюю дату из базы данных, попробуйте выполнить следующий запрос sql

 $query="SELECT * FROM user WHERE ID='".mysql_real_escape_string($_SESSION[email])."' ORDER_BY date,time desc limit 1"; 

Чтобы получить последнюю дату, вам нужно отсортировать поле для даты в порядке убывания

  $note = "SELECT * FROM notify WHERE seeker=' ".$_SESSION['email']. " ' AND donor=' ".$email." ' ORDER_BY date DESC LIMIT 1"; 

вы пытаетесь заказать по desc? как показано ниже:

 $note = "SELECT * FROM notify WHERE seeker=' ".$_SESSION['email']. " ' AND donor=' ".$email." ' ORDER_BY date DESC LIMIT 1"; 

вы забыли «здесь около даты». date – зарезервированное слово в mysql,

если вы хотите использовать его в качестве имени столбца «вокруг».

РЕДАКТИРОВАТЬ

также у вас есть дополнительное пространство, удалите его

 $note = "SELECT * FROM notify WHERE seeker='".$_SESSION['email']. "' AND donor='".$email."' ORDER_BY `date` LIMIT 1";