MySQLi错误用于数据库查询

时间:2013-11-01 23:27:29

标签: php mysqli

好的,又回来了,after my initial question。但是,这一次,我实现了一个错误回调,只是为了帮助我在这里跟踪,我将给出代码和错误回调:

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

这是错误:

  

错误:您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在'database(ip,isp,user)VALUES('184.107.171.51','AS32613 iWeb Technologies In'第1行)附近使用正确的语法

有关这里发生了什么的任何线索?今天早些时候,我修复了旧问题,然后在我尝试添加以检查数据库中是否存在该值之后,它就开始了。

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

2 个答案:

答案 0 :(得分:6)

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

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

重音字符用于转义可能的关键字。但是,当使用mysqli_query而不是mysql_query时,我建议使用Bill的方法。

答案 1 :(得分: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);