我正在尝试执行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());
}
}
任何人都可以在我的代码中看到任何错误吗?
答案 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,因为它们通常会有某种形式的缺陷。
第三,您正在使用课外的可见性关键字。