2014-09-07 4 views
0

У меня есть базы данных SQL с таблицей, как это:PHP Выберите и DateTime формат

<pre>SubmissionId | FormId | DateSubmitted  | UserIp  |</pre> 
<pre>1234   | 88  | 2014-07-25 21:47:45 | 192.168.1.5 |</pre> 
<pre>1235   | 33  | 2014-07-25 17:22:21 | 10.90.1.64 |</pre> 
<pre>1236   | 54  | 2014-07-25 09:43:12 | 192.168.1.32 |</pre> 
<pre>1237   | 89  | 2014-08-20 11:13:44 | 10.88.45.5 |</pre> 

Типы данных:
SubmissionId является Int (11) AUTO_INCREMENT
FormID является Int (11)
Дата отправки is datetime
UserIp является VARCHAR (15)

Задача: У меня есть ассоциативный массив, откуда я могу получить значения FormID, DateSubmitted и UserIp. (массив $ data) И используя эти значения, я должен найти SubmissionId.

Так у меня есть такой код:

$res1 = $data['FormId']; 
    $res2 = $data['DateSubmitted']; 
    $res3 = $data['UserIp']; 
    $query = "SELECT `SubmissionId` FROM `my_table1` WHERE `FormId` = '".$res1."' AND DATE(`DateSubmitted`) = DATE('".$res2."') AND `UserIp`='".$res3."'"; 
    $db->setQuery($query); 
    $res11 = $db->loadResult(); 
//Update the value in another table 
    $db->setQuery("UPDATE `my_table2` SET `FieldValue` = '".$res11."' WHERE `FieldName`='SubmissionNumber' AND `Name`='Test1'"); 
    $db->query(); 

Итак, как вы видите, код получает значения DateSubmitted и получает только дату без времени. Таким образом, поиск имеет неправильный результат, если у меня есть несколько равных дат. Мне нужно изменить код, чтобы использовать всю ценность datetime. Мне тоже нужно использовать время.

Поэтому я не знаю, какую функцию использовать, чтобы мой запрос SELECT работал правильно.

Вы можете мне помочь?

ответ

0
"`DateSubmitted` = '".$res2."'" 

В качестве альтернативы, если вы хотите добавить серую зону там (вместо того, чтобы требовать, чтобы второй точности) вы могли бы сделать что-то вроде:

"`DateSubmitted` BETWEEN '".$res2."' - INTERVAL 60 SECOND AND '".$res2."' + INTERVAL 60 SECOND" 

Убедитесь, чтобы избежать переменные, хотя, дон» t want sql injection :)

Редактировать: Если это текстовое поле свободной формы, которое вы также можете добавить (php) strtotime, а затем date ('Ymd H: i: s'), чтобы убедиться, что это правильно отформатирован.

So $res2 = date('Y-m-d H:i:s', strtotime($data['DateSubmitted']));