有人可以看到这个
之间的差异$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')";
只有第二个有效,但第一个没有,但看起来和我完全一样。
答案 0 :(得分:1)
两者之间的区别很简单。
一个是在列名称周围使用常规引号'
,这些名称主要用于标识字符串文字值,而不是用于转义表/列名称的反引号。
阅读字符串文字和标识符限定符:
在处理数据库时,您需要了解这些内容。
只有表/列名称包含空格,连字符或MySQL reserved word时,才会使用反引号。
旁注:如果你的列名都没有空格,连字符或者不是保留字,你可以完全省略勾号。
参考:
使用此示例将失败。
SELECT column_name FROM my-table
会产生以下错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在' -
附近使用正确的语法
这里发生的事情是,my-table
将被解释为my
MINUS table
,MySQL认为您想要解决数学问题。
这与INSERT查询的情况相同。
致命错误:未捕获的异常' mysqli_sql_exception'带有消息'您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在''用户名'
附近使用正确的语法
鉴于:
SELECT `column 1` FROM `my-table`
带反引号的会有效并且不会产生语法错误。
第一行代码会产生语法错误。
"怪异的mysqli未知错误?"
重要说明:
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`)