2013-11-01 73 views
3

好的,等回来,after my initial question。然而这一次,我实现了一个错误回调只是为了帮助跟踪我这里,我给两个密码,并错误回调:MySQLi数据库查询错误

$Query = mysqli_query($Connection, "INSERT INTO database (ip, isp, user) VALUES ('$IP', '$ISP', '$User')"); 

这里的错误:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database (ip, isp, user) VALUES ('184.107.171.51', 'AS32613 iWeb Technologies In' at line 1

任何关于这里发生了什么的线索?今天早些时候,我解决了老问题,然后在尝试添加以检查数据库中是否存在该值之后,它开始执行此操作。

任何帮助,无论是消极或积极的,非常感谢,谢谢。

+1

感谢谁发布,你不应该删除它,它解决了我的问题。谢谢! – user2943677

+0

对不起,编辑刚刚删除了重音字符,这是必要的。请现在尝试我新编辑的声明。 – grobmotoriker

回答

6

好,“数据库”是MySQL中的保留关键字 - 尝试:

 
$Query = mysqli_query($Connection, "INSERT INTO `database` (`ip`, `isp`, `user`) VALUES ('$IP', '$ISP', '$User')"); 

口音字符用来逃避可能的关键字。但是,当使用mysqli_query而不是mysql_query时,我建议使用Bill的方法。

+1

它现在也正常提交,非常感谢。 – user2943677

+0

+1你删除了你的答案,然后你在我写答案时恢复了答案。你应该先获得回答。 –

+0

谢谢,但插入查询的东西是一个很好的补充,恕我直言,评价+1 – grobmotoriker

3

在错误的上下文中使用MySQL reserved word会导致解析器出现模糊和混乱。例如,单词DATABASE是一个保留字。

您可以使用保留字作为标识符来区分它们(请注意,您不能在大多数其他编程语言中这样做)。在MySQL中,使用back-ticks作为分隔符不是单引号!

$Query = mysqli_query($Connection, "INSERT INTO `database` (ip, isp, user) 
    VALUES ('$IP', '$ISP', '$User')"); 

请注意USER不是保留字。你不需要划定它,但它没有任何伤害。

PS:这与您的问题没有直接关系,但请了解如何使用prepared queries,而不是将PHP变量直接插入到您的SQL字符串中。

$Query = mysqli_prepare($Connection, "INSERT INTO `database` (ip, isp, user) 
    VALUES (?, ?, ?)"); 
$Query->bind_param("sss", $IP, $ISP, $User); 
+1

感谢您的提示:P – user2943677