执行mysqli_query时出现SQL语法错误

时间:2014-10-08 20:29:40

标签: php mysql sql oop mysqli

我有一个使用MySQLi和OOP的PHP注册脚本。 但是我在执行查询时遇到了mysql语法错误。

 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)";

问题是什么?

4 个答案:

答案 0 :(得分: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

虽然允许使用空格(但不鼓励),但它们也需要封装在反引号中。

答案 1 :(得分:2)

如果您要在列标识符中使用破折号(这是一个坏主意),您必须将其包装在刻度线中。否则,您将从mail列中减去e列中的值,该值在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')";

答案 2 :(得分:0)

尝试将电子邮件字段名称更改为电子邮件,或者您需要使用以下引号括起您的字段名称:

`e-mail`

答案 3 :(得分:-1)

我认为您的ID设置为自动增量。 如果只是从insert语句中删除第一列,它应该可以正常工作。

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

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