Php PDO错误sql状态42000
我在模型中有查询功能:Php PDO错误sql状态42000,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我在模型中有查询功能: public function query($qry, $params = array()) { try { $pdo = $this->prepare($qry); $pdo->execute($params); return $pdo->fetchAll(PDO::FETCH_OBJ); } catch (PDOException
public function query($qry, $params = array()) {
try {
$pdo = $this->prepare($qry);
$pdo->execute($params);
return $pdo->fetchAll(PDO::FETCH_OBJ);
}
catch (PDOException $e) {
return '<div class="error message">' . $e->getMessage() . '</div>';
}
}
注意:这只是测试代码
我发现了一个例外:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key) VALUES
我不知道
key)附近的语法错误在哪里
您应该使用backtick(`)符号将每个列名括起来,因为它可能包含查询中的mysql关键字;密码和密钥是mysql的关键字。key
是一个。您需要用反勾号引用它,才能将其用作列名。@MichaelBerkowski谢谢,我是PDO的新成员,保留关键字页的书签。从现在起,我将使用backtick来确保一切。如果你愿意,创建答案,这样我可以给你加上一些分数。我不需要这些分数。接受下面的任何答案。您真的不需要对每个列名都倒引号——一个更好、更常见的策略是了解保留字是什么,然后避免将它们用作列和表名,因此您可以避开这个问题。也就是说,为了安全起见,大多数构造查询的框架都会引用所有标识符。就个人而言,当手工编码时,我宁愿避免它。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key) VALUES