我正在尝试执行一个寄存器类。但查询不起作用(查询突出显示。这似乎是一个简单的问题,但我没有看到它。我回应查询并复制并通过phpmyadmin执行它sql查询框,它说错误1064.我似乎无法找到任何问题。
<?php
class register
{
protected $username;
protected $password;
protected $email;
protected $postcode;
public function __construct()
{
}
public function insertuser($username, $password,$email, $postcode)
{
$this->_email = mysql_real_escape_string($email);
$this->_password = mysql_real_escape_string($password);
$this->_username = mysql_real_escape_string($username);
$this->_postcode = mysql_real_escape_string($postcode);
**$query = "INSERT INTO 'users'('user_id', 'username', 'password', 'email', 'postcode') VALUES (NULL,'{$username}','{$password}','{$email}','{$postcode}');";**
echo $query;
$result = mysql_query($query);
return $result;
}
}
?>
答案 0 :(得分:1)
error 1064
表示SQL语法错误。您在表名和列名称周围使用了单引号:'
。用背景代替它们:`
"INSERT INTO `users` (
`user_id`, `username`, `password`, `email`, `postcode`
) VALUES (
NULL,'{$username}','{$password}','{$email}','{$postcode}'
);"
答案 1 :(得分:0)
语法似乎错了。表名和列名不应该有引号。他们应该有反击或什么也没有。否则,它们将被视为字符串文字。
INSERT INTO users (user_id, username, password, email, postcode)
VALUES (NULL,'{$username}','{$password}','{$email}','{$postcode}')
如果值列表完整且按顺序,您也不需要字段列表。结尾的分号是不可取的(虽然无效)。
您的代码很容易被注入。您应该使用PDO或mysqli
正确参数化查询答案 2 :(得分:0)
您的表和列周围有单引号。你将这些与反引号混淆 - 除非你使用reserved word(你应该避免使用IMO),否则这是不必要的。
此外,您没有使用已清理的变量,因此容易受到SQL injection的攻击。</ p>
INSERT INTO users (user_id, username, password, email, postcode) VALUES (NULL,'{$this->_username}','{$this->_password}','{$this->_email}','{$this->_postcode}');
强制性: mysql_*
函数将为deprecated in PHP 5.5。建议不要编写新代码,因为将来会将其删除。相反,可以是MySQLi或PDO和be a better PHP Developer。
答案 3 :(得分:0)
除了使用预准备语句之外,你绝对应该考虑切换到mysqli。使用预先准备的语句可以使您的查询更容易,并进一步保护您免受注射。
请参阅http://php.net/manual/en/mysqli.prepare.php
至于你的错误,有一些问题。不要使用引号调用数据库。不要使用引号处理表名。这些都是Explosion Pills所指出的。
最后,我没有看到你打开mysqli连接的位置。