当我删除'$ user'并且完美无缺时
$query = $db -> query("INSERT INTO posts (title, body, tags, published, date, by) VALUES
('$title', '$body', '$tags', '$published', '$date', '$user')");
用户是varchar(11)
当我print_r $ user时,我得到了我想要的值
我不确定发生了什么,by
位于表的末尾。
很抱歉,如果这个问题很愚蠢。
和平
答案 0 :(得分:7)
因为BY
是一个保留关键字,恰好是列的名称。为了避免语法错误,您需要使用反引号来转义它,
INSERT INTO posts (title, body, tags, published, date, `by`) VALUES (...)
我宁愿更改列名,以免再次出现问题:D
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:1)
此外,您还可以在“日期”列中添加反引号,因为它也是一个保留字。
INSERT INTO posts (title, body, tags, published, `date`, `by`) VALUES (...)
在我的情况下,我真的不喜欢使用反引号,但它确实有助于避免语法错误..