SQL Insert由于某种原因不起作用

时间:2013-04-23 02:42:55

标签: php mysql sql

当我删除'$ 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位于表的末尾。

很抱歉,如果这个问题很愚蠢。

和平

2 个答案:

答案 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 (...)

在我的情况下,我真的不喜欢使用反引号,但它确实有助于避免语法错误..