ошибка обновления строки в таблице postgres - PullRequest
1 голос
/ 04 февраля 2009

Мой стол:

CREATE TABLE A(
    id serial NOT NULL,
    date timestamp without time zone,
    type text,
    sub_type text,
    filename text,
    filepath text,
    filesize integer,
);

У меня есть процедура обновления:

$Query = "UPDATE A SET type=\"" . $strType . "\" where id=" . intval($ID);

Проблема:

Когда $ strType является строкой, например «салат», я получаю эту ошибку:

ERROR:  column "lettuce" does not exist

Когда это int, ошибки нет.

Идеи?

больше фона:

  • код вставки успешно добавляет имя файла, путь к файлу, оба типа текста

Ответы [ 2 ]

4 голосов
/ 04 февраля 2009

В SQL двойные кавычки являются разделителями идентификаторов. Оператор UPDATE пытается установить для столбца type значение столбца "lettuce", что является ошибкой, если столбец с именем lettuce отсутствует.

Вы хотите использовать одинарные кавычки для разделения строкового литерала в SQL:

$Query = "UPDATE A SET type='" . $strType . "' where id=" . intval($ID);

См. Также " Разные базы данных используют разные кавычки имен? "

3 голосов
/ 04 февраля 2009

Ваша кодировка открыта для внедрения SQL. Используйте заполнители (возможно, не заключенные в кавычки вопросительные знаки) и передайте значение отдельно. Это позволяет избежать проблем при XKCD .

У Билла есть ответ на вашу непосредственную проблему с именами столбцов и строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...