Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO错误sql状态42000_Php_Mysql_Sql_Pdo - Fatal编程技术网

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