我的表是:
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时,没有错误。
想法?
更多背景资料:
答案 0 :(得分:4)
在SQL中,双引号是标识符分隔符。您的UPDATE语句正在尝试将type
列设置为"lettuce"
列的值,如果没有名为lettuce的列,则会出错。
您希望使用单引号在SQL中分隔字符串文字:
$Query = "UPDATE A SET type='" . $strType . "' where id=" . intval($ID);
答案 1 :(得分:3)
您的编码对SQL注入是开放的。使用占位符(可能是不带引号的问号)并单独传递值。这避免了XKCD的问题。
比尔可以解答您关于列名与字符串的直接问题。