奇怪的mysqli未知的错误?

时间:2016-03-04 02:38:13

标签: php mysql database mysqli

有人可以看到这个

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

和这个

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

只有第二个有效,但第一个没有,但看起来和我完全一样。

2 个答案:

答案 0 :(得分:1)

两者之间的区别很简单。

一个是在列名称周围使用常规引号',这些名称主要用于标识字符串文字值,而不是用于转义表/列名称的反引号。

阅读字符串文字和标识符限定符:

在处理数据库时,您需要了解这些内容。

只有表/列名称包含空格,连字符或MySQL reserved word时,才会使用

反引号。

旁注:如果你的列名都没有空格,连字符或者不是保留字,你可以完全省略勾号。

参考:

使用此示例将失败。

SELECT column_name FROM my-table

会产生以下错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在' -

附近使用正确的语法

这里发生的事情是,my-table将被解释为my MINUS table,MySQL认为您想要解决数学问题。

这与INSERT查询的情况相同。

  • INSERT 会产生以下错误:
  

致命错误:未捕获的异常' mysqli_sql_exception'带有消息'您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在''用户名'

附近使用正确的语法

鉴于:

SELECT `column 1` FROM `my-table`
带反引号的

会有效并且不会产生语法错误。

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

  

"怪异的mysqli未知错误?"

  • 它只是"怪异的"当事情不清楚/未知时。
关于在SELECT中使用引号或空格的

重要说明

SELECT user name FROM table

将产生以下内容:

  

未知栏'用户'在'字段列表'

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

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

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

如果您没有正确转义这些值,请使用预先准备好的声明。

参考文献:

检查错误。

根据用于连接的MySQL API未知,检查错误会引发一些关于它的事情。

使用相应的方法:

mysqli_示例:

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

答案 1 :(得分:0)

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

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