2013-05-07 2 views
2

У меня есть функция, как показано ниже, для извлечения записей из базы данных mysql.Сравните поле mysql datetime со строкой datetime

function getMember($read, $selected_joined_date) { 
    $sql = "SELECT first_name, last_name, member.joined_date 
      FROM user 
      INNER JOIN member USING (user_id) 
      WHERE user.joined_date > $selected_joined_date 
      ORDER BY joined_date"; 
    return $read->fetchAll($sql); 
} 

Это dipslays сообщение об ошибке отображается в виде

«SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа.

Поле 'joined_date' является DateTime формат в таблице и $ selected_joined_date является формат строки.

Как сравнить различный формат даты и времени?

функция
+0

Где код, который выполняет ваш $ sql-запрос? И как выглядит значение '$ selected_joined_date'?post 'echo $ selected_joined_date;' – peterm

+0

Как формируется выходной формат '$ selected_joined_date'? – MISJHA

+0

Пример формата вывода $ selected_joined_date - это 2013-03-25 12:30:54 – user2359714

ответ

0

Вы можете использовать Дата(), предоставленный mysql преобразовать формат строки в Дата

 mysql> SELECT DATE('2003-12-31 01:02:03'); 
     -> '2003-12-31'

И ваш запрос будет выглядеть следующим образом: Got MySql Solution, вы можете использовать функцию str_to_date as;

mysql>select str_to_date('2012-10-12 10:20:30','%Y-%m-%d %H:%i:%s'); 

Так что ваша Sql Строка будет,

$sql = "SELECT first_name, last_name, member.joined_date 
     FROM user 
     INNER JOIN member USING (user_id) 
     WHERE user.joined_date >str_to_date('$selected_joined_date','%Y-%m-%d %H:%i:%s') 
     ORDER BY joined_date"; 
// Provided that string selected_joined_date is in format 2012-10-12 10:20:30 
+0

Формат join_date - формат даты и времени. поэтому необходимо сравнить время, а также – user2359714

+0

Код изменен, см. Если он решает. [используя этот пост] (http://stackoverflow.com/questions/8063057/convert-this-string-to-datetime?answertab=oldest#tab -top) – progrrammer

+0

не работает также – user2359714

0

Вы должны кавычки ваших строк в запросе.

$sql = "SELECT first_name, last_name, member.joined_date 
     FROM user 
     INNER JOIN member USING (user_id) 
     WHERE user.joined_date > '$selected_joined_date' 
     ORDER BY joined_date"; 
+0

Решено. Большое спасибо ! – user2359714

+0

Добро пожаловать! :-) –

0

Mysql нравится datetimes в формате «2013-05-07 15:30:00», php может обрабатывать практически все.

Вы бы конвертировать $ selected_join_date в этот формат так:

$selected_join_date = date("Y-m-d H:i:s", strtotime($selected_join_date)); 

предполагая $ selected_join_date находится в одном из принятых форматов РНР: http://www.php.net/manual/en/datetime.formats.php

Затем вы можете передать строку в MySQL, и он будет счастливо Сравните их. Переменная (и, следовательно, время даты строки) должна быть внутри кавычек в sql, как отметил Ракет Хазмат.

0

Я сделал небольшой тест из любопытства, должен ли формат даты php быть таким же, как формат datetime mysql. Оказалось, что формат не имеет значения. Если переменная PHP была в формате Mysql Date and Time, поиск был успешным.

по умолчанию формат MySQL DateTime:

YYYY-MM-DD HH:MM:SS 

форматы, используемых для поиска базы данных:

'Y-m-d H:i:s' 
'Y/m/d H:i:s' 
'Y/m/d' 
'YmdHis' 
'Ymd' 

даты отформатированной DateTime::createFromFormat() функцией

Проблемы, за исключением того, что $selected_joined_date переменных в запросе должно быть внутри кавычек, похоже, где-то еще.

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