无法确定INSERT PDO错误。 SQLSTATE [42000]:语法错误或访问冲突

时间:2018-05-01 10:55:10

标签: php mysql pdo syntax-error sql-insert

我正在尝试执行SQL INSERT但是我收到错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行“密钥”VALUES(example@example.com,hello)附近使用正确的语法

表中的值为:id(自动增量),电子邮件和密钥,它们都是varchar(255),id为(int)。

function validate($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

$key = 'hello';
$email = validate($_POST['email']);

$insert = $user->recordPasswordReset($email, $key);


public function recordPasswordReset($email, $key)
{
    try 
    {
        $db = DB();
        $sql = "INSERT INTO password_reset(email, key) VALUES (:email, :key)";
        $stmt = $db->prepare($sql);
        $stmt->bindParam(':email', $email, PDO::PARAM_STR);
        $stmt->bindParam(':key', $key, PDO::PARAM_STR);
        $stmt->execute();
    } 
    catch (PDOException $e) 
    {
        echo ($e->getMessage());
    }
}

任何人都可以在我的代码中看到任何错误吗?

1 个答案:

答案 0 :(得分:1)

首先,根据documentation,您的字段名称key是保留关键字。你需要在它周围使用反向标记。

更改,

INSERT INTO password_reset(email, key) VALUES (:email, :key)

要,

INSERT INTO password_reset(email, `key`) VALUES (:email, :key)

其次,请不要使用all-in-one sanitize function,因为它们通常会有某种形式的缺陷。

第三,您正在使用课外的可见性关键字。