2016-03-04 30 views
0

有人可以看到,这奇怪的mysqli未知的错误?

$query_2 = "INSERT INTO users (`username`, `password`, `email`, `firstname`, `lastname`, `user_level`) VALUES ('$username', '$password', '$email', '$firstname', '$lastname', '1')"; 

只有第二个作品这

$query = "INSERT INTO users ('username', 'password', 'email', 'firstname', 'lastname', 'user_level') VALUES ('$username', '$password', '$email', '$firstname', '$lastname', '1')"; 

之间的差异,但第一个没有,但它看起来完全一样的我。

+1

返回打勾和单引号不一样,简单地说。后面的勾号表示名称,单引号表示值。 – SirUncleCid

+0

从#1的列名称中删除单引号,或使用回刻度引号 –

回答

1

两者之间的区别很简单。

一个围绕列名称使用常规引号'主要用于识别字符串字面值,而不是用于转义表/列名称的反引号。

阅读上的字符串文字和标识预选赛:

这些都是你需要知道的差别外,与数据库打交道时。

反斜杠主要用于任何时候表/列名称包含空格,连字符或是MySQL reserved word

旁注:如果没有列名包含空格,连字符或不是保留字,则可以完全省略滴答。

参考:

使用这个例子会失败。

SELECT column_name FROM my-table 

将产生以下错误:

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 '-

这到底是怎么发生的是,my-table会被解释为my减号table和MySQL认为你想要做一个数学问题。

这与INSERT查询的情况相同。

  • INSERT将产生以下错误:

Fatal error: Uncaught exception 'mysqli_sql_exception' with message '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 ''username'

鉴于:

SELECT `column 1` FROM `my-table` 

与反引号将是有效的,并且不会产生语法错误。

第一行代码会产生语法错误。

"weird mysqli unknown mistake?"

  • 这只是 “怪异” 当事情不清楚/未知。

重要提示有关使用引号或空间SELECT:

SELECT user name FROM table 

将产生如下:

Unknown column 'user' in 'field list'

SELECT 'username' FROM table WHERE username='".$username."'

不会产生一个错误,但奇怪的是,给你一个完全不同于e的结果xpected。

关于您目前使用的值,可能会让您打开SQL注入。

如果您没有正确转义这些值,请使用准备好的语句。

参考文献:

错误检查。

根据用于连接的未知的MySQL API,检查错误会引发你一些问题。

使用相应的方法:

一个mysqli_例如:

mysqli_query(...) or die(mysqli_error($connection)); 
0

MySQL不允许(')字段名称上的字符。 MySQL只允许(`)字符包含字段名称。

Example: 
Wrong: 
$query_1 = INSERT INTO users ('username') 
Correct: 
$query_2 = INSERT INTO users (`username`)