Php 使用WHERE分隔符选择多个列时出现MySQL语法错误?

Php 使用WHERE分隔符选择多个列时出现MySQL语法错误?,php,mysql,sql,ajax,database,Php,Mysql,Sql,Ajax,Database,我有一个相当简单的查询来处理我的ajax应用程序,但它给出了以下错误: 您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行的“desc,price FROM products WHERE id='asfasf1''附近使用的正确语法 我被这一点绊倒了,因为我在任何地方都看不到语法错误: echo json_encode($this->query("SELECT name, desc, price FROM products WHERE id='".$id."';"

我有一个相当简单的查询来处理我的ajax应用程序,但它给出了以下错误:

您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行的“desc,price FROM products WHERE id='asfasf1''附近使用的正确语法

我被这一点绊倒了,因为我在任何地方都看不到语法错误:

echo json_encode($this->query("SELECT name, desc, price FROM products WHERE id='".$id."';"), JSON_FORCE_OBJECT);
query()如下所示:

function query($query){
        $link = mysql_connect($this->host, $this->username, $this->password);
        $connected = mysql_select_db($this->database, $link);
        if(!$connected){
            die("Error: selecting database.");
        }
        $q = mysql_query($query);
        if(!$q){
            return "Error: ".mysql_error();
        }
        $result = mysql_fetch_assoc($q);
        return $result;
    }

当然,这是在一个对象内部,但这不应该与它有任何关系。所有字段都是正确的,数据库可以连接到,因为query()与其他代码一起使用了多次,并且运行良好。请提供帮助。

desc
是SQL中的一个关键字(用于按降序排序)。如果要将其用作列名,请尝试引用它:

$this->query("SELECT name, `desc`, price FROM products WHERE id='".$id."';")
有关几乎相同的示例,以及有关如何处理关键字的更多详细信息,请参阅


或者你可以把你的专栏改名为“description”,比如说。虽然引用是“正确”的解决方案,但如果可以的话,通常避免使用保留字作为列名是很有帮助的。

很有可能
id
必须使用双引号,而不是单引号


顺便说一句,这类事情要小心,因为它使SQL注入攻击非常容易。

1)我认为您不必以分号结束SQL语句2)您确定逗号实际上是逗号3)您是否尝试过输出生成的查询并在phpmyadmin中运行它?别担心,我已经跳过了输入,这个功能只有管理员才能访问:-)非常感谢,我真不敢相信我没有注意到(我以前甚至用它来排序数据)!我要更改表名。非常感谢。