PHP MySQL синтаксис для вставки даты, времени - PullRequest
1 голос
/ 03 мая 2009

Я пытаюсь вставить поля даты, времени, используя скрипт php, но получаю синтаксическую ошибку. Может кто-нибудь, пожалуйста, скажите мне, где я делаю ошибку. Спасибо, ребята

INSERT INTO календарь (событие, с, по, день) ЦЕННОСТИ ( ' "$ _ REQUEST [ 'событие']."', ' "$ _ REQUEST [ 'FROM_TIME']."', ' "$ _ REQUEST [ 'TO_TIME']."', ' "$ _ REQUEST [ 'date_event']."')

Ответы [ 2 ]

6 голосов
/ 10 августа 2009

Чтобы вставить в поля даты и времени mySQL, строка должна быть в определенном формате, чтобы mySQL могла это понять. Проблема в том, что у php есть свои мысли и идеи о том, как представлены даты. Когда имеешь дело с датами между ними, вам нужно перевести.

Если в php вы имеете дело с объектом времени, вы можете сделать это, чтобы получить строку, которую mySQL будет любить:

$mysqlDateString = date('Y-m-d H:i:s', $phpdate);

или если вы имеете дело со строковой датой, вы можете сделать это:

$mysqlDateString = date('Y-m-d H:i:s', $strtotime("08/09/2009"));

Если вы получили строку даты и времени из mySQL, вы можете сделать это, чтобы справиться с ней в PHP:

$phpTime = strtotime($mysqlDateString);

Только что сам столкнулся с этой проблемой, так что, надеюсь, это сработает и для вас.

2 голосов
/ 03 мая 2009

Никогда не вставляйте строковые данные в оператор SQL без очистки данных, иначе вы получите SQL-инъекции (преднамеренные или непреднамеренные инъекции), см. http://php.net/mysql_real_escape_string
Если у вас не установлен отладчик, позвольте php напечатать оператор sql, чтобы вы могли проверить его.

Форматирование и отступ ваших запросов SQL. Их намного проще читать и отлаживать.

Всегда проверяйте возвращаемое значение mysql_query (). Если это ЛОЖЬ, запрос не выполнен и mysql_errno () или mysql_error () может рассказать вам больше о причине ошибки.

Если вы хотите использовать идентификатор, который также является зарезервированным словом для MySQL , вы почти всегда должны указывать его в обратных кавычках (`) или double_quotes (в режиме ansi).

Формат литералов даты / времени, понятный MySQL, объяснен на http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html

Использование _REQUEST для операций INSERT может быть сомнительным ... но я оставляю это другим, чтобы ответить; -)

<code><?php
$mysql = mysql_connect...</p>

<p>$query = "
  INSERT INTO
    &#96;calendar&#96;
    (&#96;event&#96;, &#96;from&#96;, &#96;to&#96;, &#96;day&#96;)
  VALUES
    (
      '" . mysql_real_escape_string($_REQUEST['event'], $mysql) ."',
      '" . mysql_real_escape_string($_REQUEST['from_time'], $mysql) ."',
      '" . mysql_real_escape_string($_REQUEST['to_time'], $mysql) ."',
      '" . mysql_real_escape_string($_REQUEST['date_event'], $mysql]) ."'
    )
";
echo '<pre>$query=', htmlspecialchars($query), '
'; $ result = mysql_query ($ query, $ mysql); if (! $ result) { echo 'error:', mysql_error ($ mysql); } И кстати: используйте вместо этого подготовленные операторы .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...