2014-10-08 49 views
2

我有一个使用MySQLi和OOP的PHP注册脚本。 但执行查询时,我得到一个mysql语法错误。SQL语法执行mysqli_query时出错

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 '-mail, ip_register, ip_lastlogin, lastlogin) VALUES ('', Aarivex, ******, ****' at line 1 

PHP代码:

$register_sql = "INSERT INTO users (id, username, password, pin, e-mail, ip_register, ip_lastlogin, lastlogin) VALUES ('', $username, $password, $pin, $email, $ip, $ip, $lastlogin)"; 

哪来的问题?

+0

Geez,这是一个容易的。 – 2014-10-08 20:34:11

+0

P.S.查看参数化查询。这(可能)是不安全的。 – 2014-10-08 20:40:16

+0

解决了我的问题。 Thx给所有人! 我必须将'id'值设置为0,将电子邮件更改为电子邮件并添加引号。 – Aarivex 2014-10-08 20:44:18

回答

3
...for the right syntax to use near '-mail 
SQL's telling you where error starts^the offending character 

由于包含连字符,因此需要在反引号中包装/封装e-mail列。

SQL数字你想要做的数学翻译为:e减去mail

此外,失踪的报价在你的价值观

$register_sql = "INSERT INTO users (id, username, password, pin, `e-mail`, ip_register, ip_lastlogin, lastlogin) VALUES ('', '$username', '$password', '$pin', '$email', '$ip', '$ip', '$lastlogin')"; 

这些都是字符串,并且必须是引号内。

  • 另一种选择是使用下划线将您的列重命名为e_mail,正如您对某些其他列所做的那样。这样,你就不需要使用反引号。

考虑使用下面还有一个:


曾使用or die(mysqli_error($con))mysqli_query()会发出信号错误(或多个)。

$con是你的数据库连接,这可能/站在比你的不同。

  • 相应地进行调整。

标识符(表/列)


提示:

尽量避免使用连字符或空格或任何其他字符SQL可能会抱怨,这包括在单词之间用的空间。

即:

INSERT INTO your_table (column 1, column-2) <= will cause/throw an error 

你需要使用反引号:

INSERT INTO your_table (`column 1`, `column-2`) <= correct/valid 

尽管有空格(灰心失望),他们也需要在反引号被封装。

+0

+1提到缺少的引号。我远没有那么做。 – 2014-10-08 20:36:56

+0

@JohnConde谢谢你约翰:) – 2014-10-08 20:37:24

0

尝试更改电子邮件字段名,以电子邮件或需要使用反引号这样涵盖你该字段名称:

`e-mail` 
2

如果你打算在一列标识符破折号(这是一个不好的主意)你必须包装在蜱中。否则,您正在从e列中减去mail列的值,该列在INSERT语句中不是无效的。

您还缺少字符串值的引号。

$register_sql = "INSERT INTO users (id, username, password, pin, `e-mail`, ip_register, ip_lastlogin, lastlogin) VALUES ('', '$username', '$password', '$pin', '$email', '$ip', '$ip', '$lastlogin')"; 
-1

我想你的ID设置为自动递增。 如果它只是从插入语句中删除第一列,它应该工作正常。

$register_sql = "INSERT INTO users (username, password, pin, e-mail, ip_register, ip_lastlogin, lastlogin) VALUES ($username, $password, $pin, $email, $ip, $ip, $lastlogin)"; 

是的,将电子邮件字段更改为“电子邮件”。