medbrat69
@medbrat69
Основатель toster.ru

Исключение PDO за номером 42601, как исправить?

Добрый вечер. Есть выражение:
$this->insertStmt = $this->connection->getPdo()->prepare("
    INSERT INTO files (
           real_name, 
           virtual_name, 
           album,
           size,
           resolution, 
           duration, 
           comment,
           path,
           user
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
");

Которое вызывается как обычно:
protected function doInsert(object $object)
{
    $values = [
        $object->getRealName(),
        $object->getVirtualName(),
        $object->getAlbum(),
        $object->getSize(),
        $object->getResolution(),
        $object->getDuration(),
        $object->getComment(),
        $object->getPath(),
        $object->getUser(),
    ];
       
    $this->insertStmt->execute($values);
}


Примерное содержание $values:
array(9) { 
    [0]=> string(15) "BvrK9z6UPxY.jpg" 
    [1]=> string(16) "1265dde1c67abc1c" 
    [2]=> string(23) "По умолчанию" 
    [3]=> int(54973) 
    [4]=> string(7) "720x430" 
    [5]=> NULL 
    [6]=> string(0) "" 
    [7]=> string(108) "files/id5cd487313a93a/По умолчанию/2019-05-10/1265dde1c67abc1c.jpg" 
    [8]=> string(15) "id5cd487313a93a" 
}


Сообщение ошибки:
Type: PDOException
Code: 42601
Message: SQLSTATE[42601]: Syntax error: 7 ОШИБКА: ошибка синтаксиса (примерное положение: "user") LINE 11: user ^


С точки зрения синтаксиса вроде все верно, много раз перепроверил, IDE ни на что не ругается. В чем трабл, господа?
  • Вопрос задан
  • 5901 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
СУБД однозначно отвечает, что не согласна с синтаксисом.

Если не читать списки зарезервированных слов - то да, может быть не совсем очевидно почему этот запрос синтаксически неверен. Но тем не менее слово user всё равно зарезервировано и стандартами SQL и конкретной реализацией в postgresql. А потому не может использоваться в качестве unquoted идентификатора.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы