Не может ввести дату в поле пост-ГРЭС с меткой времени типа данных

Бесплатные структуры данных блокировки собираются иметь проблемы, пока они не изменяют CLR с путаницей, вызванной моделями памяти, см. спецификацию CLI.

программирование без Блокировок является достаточно трудным, что Вы не должны беспокоить им на наборе (контейнер) уровень btw. Верный для любого языка там..

5
задан Charles 25 December 2012 в 02:12
поделиться

3 ответа

Вы пытаетесь вставить метку времени. Вам нужно связать время с датой. Из документации Postgres :

Допустимый ввод для типов отметок времени состоит из конкатенации даты и время, за которым следует необязательный часовой пояс, за которым следует необязательная AD или до н.э. (В качестве альтернативы AD / BC может появляются перед часовым поясом, но это не является предпочтительным порядком.) Таким образом,

1999-01-08 04:05:06

и

1999-01-08 04:05:06 -8: 00

действительны значения, соответствующие ISO 8601 стандарт.

Do:

$date = '2002-03-11 12:01AM';
9
ответ дан 18 December 2019 в 08:29
поделиться

Я не понимаю, почему вы получаете эту ошибку, когда значение в кавычках пусто. PostgreSQL определенно принимает даты без времени в полях отметок времени. По умолчанию установлено время «00:00:00», начало этого дня.

CREATE TABLE dates("date" timestamp);
INSERT INTO dates (date) VALUES ('2002-03-11');
SELECT * from dates;
        date         
---------------------
2002-03-11 00:00:00

Есть несколько вещей, которые вы здесь делаете, но не совсем правильно, и одно из них может улучшить вашу ситуацию. :

  • Использование цитаты вместо подготовленных операторов в реальном приложении - это первый шаг к тому, чтобы позволить атакам SQL-инъекций в ваш код, а это плохая привычка. Тот факт, что вы получаете здесь ошибку, заставляет меня задаться вопросом, не делает ли PDO что-то не так в середине, что было бы с меньшей вероятностью, если бы вы подготовили оператор и передали значение более напрямую.
  • Вам действительно следует преобразовать это непосредственно из строки в метку времени, а не полагаться на неявное приведение здесь. Пример в прямом SQL:

     INSERT INTO date (date) VALUES (приведение ('2002-03-11' как отметка времени));
    
  • «дата» - это зарезервированное слово SQL . Вы не должны называть поля таким образом, потому что вам может потребоваться заключить ссылки на имя в кавычки для их правильного анализа.

5
ответ дан 18 December 2019 в 08:29
поделиться

Кажется, ваша ошибка ясно указывает, в чем проблема:

ERROR:  invalid input syntax for type timestamp: ""

Похоже, ваш запрос пытается вставить пустую строку в поле PostgreSQL, имеющее тип отметка времени. Если вы вставляли некорректную строку какого-либо типа, она должна появиться в полученной ошибке, например:

ERROR:  invalid input syntax for type timestamp: "foobardtimestamp"

Или, в вашем случае, если ваша ожидаемая строка передавалась, ваша ошибка может выглядеть следующим образом:

ERROR:  invalid input syntax for type timestamp: "2002-03-11"

... но ошибка не говорит о том, что заставляет меня подозревать, что ваша строка на самом деле не передается в запрос, как вы думаете. Дело в том, как указывалось ранее: PostgreSQL должен быть полностью способен обрабатывать 2002-03-11 как действительную строку временной метки.

PostgreSQL не любит вставлять '' (пустую строку) в качестве метки времени и будет жаловаться на указанную вами ошибку.

Если вы хотите указать пустую строку, убедитесь, что у вас ее нет. ограничение NOT NULL для столбца, и вам нужно использовать null вместо пустой строки. Если вы не собираетесь отправлять пустую строку, я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести сгенерированный SQL перед тем, как запустить запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: (пустая строка) в качестве метки времени и будет жаловаться на указанную вами ошибку.

Если вы хотите указать пустую строку, убедитесь, что у вас нет ограничения NOT NULL на столбец, и вам нужно использовать null вместо пустой строки. Если вы не собираетесь отправлять пустую строку, я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести сгенерированный SQL перед тем, как запустить запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: (пустая строка) в качестве метки времени и будет жаловаться на указанную вами ошибку.

Если вы хотите указать пустую строку, убедитесь, что у вас нет ограничения NOT NULL на столбец, и вам нужно использовать null вместо пустой строки. Если вы не собираетесь отправлять пустую строку, я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести сгенерированный SQL перед тем, как запустить запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: вам необходимо убедиться, что у вас нет ограничения NOT NULL для столбца, и вам нужно использовать null вместо пустой строки. Если вы не собираетесь отправлять пустую строку, я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести сгенерированный SQL перед тем, как запустить запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: вам нужно убедиться, что у вас нет ограничения NOT NULL на столбец, и вам нужно использовать null вместо пустой строки. Если вы не собираетесь отправлять пустую строку, я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести сгенерированный SQL перед тем, как запустить запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: Я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попробовать вывести свой сгенерированный SQL прежде чем вы действительно запустите запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: Я бы проверил значение $ pdo-> quote ($ date) , чтобы убедиться, что вы получаете строку, которую хотите вернуть.

Вы также можете попытаться вывести свой сгенерированный SQL прежде чем вы действительно запустите запрос, чтобы убедиться, что он выглядит правильно. У меня такое чувство, что если вы это сделаете, это будет выглядеть примерно так:

INSERT INTO dates(date) VALUES('')

Кроме того, как бы то ни было, ваш пример говорит, что вы бежите: $ pdo-> query ($ date); когда я уверен, что вы хотите: $ pdo-> query ($ query);

5
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: