无法确定插入pdo错误sqlstate[42000]:语法错误或访问冲突

oipij1gg  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(358)

这个问题在这里已经有答案了

在mysql中将保留字用作表名或列名时出现语法错误(1个答案)
mysql:“sql语法错误…靠近键…”[关闭](6个答案)
引用-这个错误在php中是什么意思(36个答案)
两年前关门了。
我正在尝试执行sql插入,但出现错误:
sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;请查看与mysql服务器版本对应的手册,以获取使用near(key)值的正确语法(example@example.com,您好)在1号线
表中的值是:id(自动递增)、email和key,它们都是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());
    }
}

有人能看到我代码中的错误吗?

pdtvr36n

pdtvr36n1#

首先,根据文件,你的域名 key 是保留关键字。你需要在它周围用记号。
改变,

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

到,

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

第二,请不要使用一体化的消毒功能,因为它们通常有某种形式的缺陷。
第三,在类之外使用可见性关键字。

相关问题