2013-11-24 2 views
0

У меня есть этот запрос;SQL Type NOW() не работает

"INSERT INTO download(download_key, ip, file, expire) VALUES ('".$text."', 
'".$mysql->real_escape_string($_SERVER['REMOTE_ADDR'])."', 
'".$searchQuery['file_match']."', 
'NOW() + INTERVAL 10 MINUTES')" 

Когда я вставляю это в базу данных, срок действия строки всегда 0000-00-00 00:00:00. Я попытался типа:

  • TIMESTAMP
  • ДАТА
  • DATETIME
  • ВРЕМЯ

Но всегда 0000-00-00 00:00:00 или 00:00:00 ,

Каков правильный тип для NOW()? I`m использованием MYSQL

+0

Обратите внимание, что лучше избегать конкатенации строк вообще в пользу подготовленных операторов - иначе вы рискуете внедрить SQL-инъекцию (например, вы абсолютно уверены, что '$ text' и' $ searchQuery ['file_match'] 'являются безопасными?). Пожалуйста, прочитайте [этот вопрос] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) для получения дополнительной информации (в которой говорится, что '$ mysql-> real_escape_string () также устарела. –

+0

Да, $ текст случайный, без ввода пользователем. $ searchQuery ['file_match'] отправляется из базы данных. – user2897922

+0

_How_ был '$ searchQuery ['file_match']' помещен в базу данных? т. е. имеет ли кто-нибудь возможность добавлять случайный текст в файл? Например, строка запроса SQL? Лучше предположить, что весь текст является подозрительным (особенно из динамического источника) и использовать подготовленные операторы. Здесь вам не нужен динамический запрос (конкатенированная строка). Существует вариант использования динамических операторов, но они обычно небольшие, а «поверхность атаки» может быть ограничена даже тогда. Например, не объединяйте динамические запросы с их параметрами - подготовьте (новое) утверждение как обычно. –

ответ

3

Удалить кавычки, кавычки для строк

NOW() + INTERVAL 10 MINUTE 
+0

Still 0000-00-00 00:00:00 Тип: DATETIME – user2897922

+1

+1 это. Я добавлю еще одну вещь: цитаты не являются ошибкой для даты типа, но вам нужно поставить дату в правильном синтаксисе, если вы передаете строку для даты, так, например, генерируете правильную дату на PHP или на каком-либо другом языке, на котором вы находитесь с помощью. Так что правильный SQL был бы также: '' ',' 2013-11-24 12:00:00 ') "' –

+0

Вы уверены, что что-то вставлено? Проверьте, есть ли у вас последняя строка. – Mihai

1
"INSERT INTO download(download_key, ip, file, expire) VALUES ('".$text."', 
'".$mysql->real_escape_string($_SERVER['REMOTE_ADDR'])."', 
'".$searchQuery['file_match']."', 
NOW() + INTERVAL 10 MINUTES)" 
1

Я хочу добавить немного вещь для людей, уже сказал.

За исключением того, что вы не должны передавать функции sql как строку, поэтому не ставьте NOW() + INTERVAL 10 MINUTES в кавычки, вы также можете передать строку для даты. Вы можете сгенерировать эту дату с помощью php, например.

Попробуйте эту скрипку, чтобы проверить, как поставить простой DATE в базе данных: http://sqlfiddle.com/#!2/cddc1/1

Также с PHP вы можете генерировать дату с этим кодом:

$minutes = 10; 
$date = date('Y-m-d H:i:s', time() + $minutes*60); 
$query = "INSERT INTO download(download_key, ip, file, expire) VALUES ('$text', 
'{$mysql->real_escape_string($_SERVER['REMOTE_ADDR'])}', 
'{$searchQuery['file_match']}', 
'$date')"; 
Смежные вопросы