2009-02-04 75 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