0

当我删除 '$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在桌子的最后。

对不起,如果这个问题很愚蠢。

和平

4

2 回答 2

7

因为BY是保留关键字,恰好是列的名称。为了避免语法错误,您需要使用反引号将其转义,

INSERT INTO posts (title, body, tags, published, date, `by`) VALUES (...)

我宁愿更改列名以避免再次出现问题:D


作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-23T02:44:21.283 回答
1

此外,您还可以在“日期”列上加上反引号,因为它也是保留字..

INSERT INTO posts (title, body, tags, published, `date`, `by`) VALUES (...)

好吧,就我而言,我真的不喜欢使用反引号,但它确实有助于避免语法错误..

于 2013-04-23T03:11:43.430 回答