This question already has an answer here:
Syntax error due to using a reserved word as a table or column name in MySQL
                                
                                    (1个答案)
                                
                        
                                5年前关闭。
            
                    
当我删除'$ 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在表的末尾。

抱歉,这个问题很愚蠢。

和平

最佳答案

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

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



MySQL Reserved Keywords List


我宁愿更改列名,以避免再次返回问题:D



附带说明一下,如果变量的值来自外部,则查询容易受到SQL Injection的攻击。请查看下面的文章,以了解如何防止它。通过使用PreparedStatements,您可以避免在值周围使用单引号。


How to prevent SQL injection in PHP?

10-04 12:41