2013-08-14 3 views
0

У меня есть MySQL запрос, как этотMySQL на сегодняшний день PHP функции

SELECT s.end_date_time AS Finishtime 
FROM auctions_search AS s 
WHERE end_date_time >NOW() + INTERVAL 3 HOUR; 

так что мне нужно положить его в PHP я стараюсь, как этот

$aToday = date("Y-m-d H:i:s"); 

$aExpireAuctionTime = DBC::$slave->selectAssoc(" 
    SELECT 
     s.end_date_time AS FinisDate 
    FROM 
     {$this->sDBName_Auction}.{$this->sTBLName_Auctions_Search} AS s 
    WHERE 
     s.end_date_time >{$aToday} + INTERVAL 3 HOUR 
"); 

но дает мне ошибку, как

«У вас есть ошибка в синтаксисе SQL, проверьте, что соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с '08: 53: 24 + ИНТЕРВАЛОМ 3 ЧАСА»

end_date_time колонок магазин заканчивающейся дате пунктов, где перечислен в магазине

поэтому мне нужно выбрать пункты, где они заканчиваются не более + 3

, например, у нас есть записи для прекращения в

  1. 2013-08-15 09:51:38
  2. 2013-08-15 10:56:40
  3. 2013-08-29 18:56:00
  4. 2013-08-19 12:56:32

и текущее время 2013-08-15 08:51:38

так мне нужно выбрать

  1. 2013-08-29 18:56:00
  2. 2013-08-19 12:56:32

Потому что другой финиширует после 3h

возможно запрос должен мне как

select 
    s.end_date_time 
from 
    auctions_search AS s 
where 
    true 
    and s.start_date_time <= 3 
+0

Введите строку даты в запрос или удалите форматирование и оставьте его без кавычек в запросе: date («YmdHis») ;, или используйте отметки времени Unix. – symcbean

ответ

1

Я думаю, вы должны заключите значение даты:

WHERE s.end_date_time >'{$aToday}' + INTERVAL 3 HOUR 

отметить, что прямые передачи значений в SQL запросе (т.е. не избегая их) - плохая идея.

+0

Я разбираю их, но в дампе, возвращающем нуль, теперь это странно: D – ameldur

1

Вы можете обработать запись NOW() с помощью функции DATE_FORMAT(). Затем вы можете подобрать (дни)/(месяцы)/(годы) и сделать свой запрос.

+0

не будет работать, так как мне нужно включить его в php – ameldur

+0

(«SELECT s.end_date_time AS FinisDate FROM {$ this-> sDBName_Auction}. {$ This-> sTBLName_Auctions_Search } AS s WHERE s.end_date_time> (DATE_FORMAT ($ aToday, '% d') + INTERVAL 3 HOUR ") –

+0

" У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильной синтаксис для использования рядом с '10: 07: 04, «% d») \t \t \t + ИНТЕРВАЛ 3 ЧАС»в строке 3 – ameldur

1

PHP и SQL - это разные языки. Вы используете PHP для составления кода SQL. Сервер MySQL не увидит ваш PHP-код, а только код SQL, который вы создаете. Вы можете посмотреть, если вы Asign его переменной и распечатать его:

<?php 

$aToday = date("Y-m-d H:i:s"); 

$sql = " 
    SELECT 
     s.end_date_time AS FinisDate 
    FROM 
     {$this->sDBName_Auction}.{$this->sTBLName_Auctions_Search} AS s 
    WHERE 
     s.end_date_time >{$aToday} + INTERVAL 3 HOUR 
"; 

var_dump($sql); 

Этот код должен работать безотказно в клиенте MySQL, но это не потому, что он содержит следующее:

s.end_date_time >2013-08-14 10:19:22 + INTERVAL 3 HOUR 

Это явно недействительный SQL.Пожалуйста, сравните:

mysql> SELECT 2013-08-14 10:19:22; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '10:19:22' at line 1 
mysql> SELECT '2013-08-14 10:19:22'; 
+---------------------+ 
| 2013-08-14 10:19:22 | 
+---------------------+ 
| 2013-08-14 10:19:22 | 
+---------------------+ 
1 row in set (0.00 sec) 

Как How can I prevent SQL injection in PHP? объясняет, вы обычно не нужно вводить необработанный ввод в коде SQL (если вы не используете действительно устаревшие библиотеки баз данных). Вот за что подготовлены заявления.

И последнее, но не менее важное: если вы не пытаетесь генерировать статические запросы для кеша результатов, вы можете просто использовать NOW() или CURRENT_TIMESTAMP как синоним «текущая дата». Нет необходимости вычислять его в PHP.

+0

У меня есть allredy fix, что мой вопрос заключается в том, как добавить эти 3h с php в запрос? – ameldur

+0

[добавить «x» количество часов до настоящего времени] (http://stackoverflow.com/questions/11386308/php-add-x-amount-of-hours-to-date) –

Смежные вопросы