2009-02-04 63 views
1

我的表是:錯誤更新列

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,沒有錯誤。

想法?

更多的背景:

  • 插入代碼添加文件名,文件路徑,這兩個文本類型的成功

回答

4

在SQL中,雙引號標識符分隔符。您的UPDATE語句嘗試將type列設置爲"lettuce"列的值,如果沒有名爲lettuce的列,則該列爲錯誤。

你想使用單引號來分隔字符串中的SQL文本:

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

參見「Do different databases use different name quote?

3

你的代碼是開放的SQL注入。使用佔位符(可能是未加引號的問號)並分別傳遞值。這避免了在XKCD的問題。

比爾已經解決了關於列名與字符串的直接問題。

+0

感謝您的反饋意見。 – cbrulak 2009-02-04 07:45:48