Кажется, в вашей ошибке четко указано, в чем проблема:
ERROR: invalid input syntax for type timestamp: ""
Похоже, ваш запрос пытается вставить пустую строку в поле PostgreSQL, которое имеет тип 'timestamp'. Если вы вставили недопустимую строку какого-либо рода, она должна появиться в сообщаемой вами ошибке, например:
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('')
Кроме того, ваш пример говорит, что вы работаете:
$pdo->query($date);
когда я совершенно уверен, что вы хотите: $pdo->query($query);