语法错误或访问冲突:1064 SQL语法中有错误

时间:2014-03-22 00:04:13

标签: php mysql sql exception

我有以下PHP验证:

假设POST变量在表单中按预期设置。

 // Check if email input field is empty     
 if (empty($_POST["email"])) {
        $emailErr = "Email address required";
    }
    else {
    // If it is not empty, quote to prevent SQL injection and assign it to a variable
    $email = $_POST['email'];
    $safe_email = $db->quote($_POST['email']);
    }

    // same for password, but instead of quote I hash the password below
    if (empty($_POST["password"])) {
        $passwordErr = "Password required";
    }
    else {
        $password = $_POST["password"];
    }

如果没有错误:     //哈希密码     $ hashed_pa​​ssword = md5($ password);

// create an insert query, insert safe email and hashed password into database
$query = "INSERT INTO user VALUES ('', 0, '$safe_email', '$hashed_password')";

// perform the above query
$result = $db->query($query);

我遇到的问题是,当我在查询中使用$safe_email而非$email时,它会给我这个错误:

  

致命错误:未捕获的异常' PDOException'与消息   ' SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本为正确的语法使用附近   ' leomessi@adidas.com'',' ce0a8ad8a758c3d242d9e050c4707fb6')'在线   1'在C:\ wamp \ www \ Coursework \ register.php第65行

我不太确定这里的问题是什么,因为我的语法似乎很好。

这是我的数据库结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

您已使用$db->quote()添加了引号,因此您需要将其从$query中删除。 访问http://pl1.php.net/manual/en/pdo.quote.php#112169并查看示例中的代码。