【问题标题】:MySQL syntax error in selecting multiple columns with the WHERE delimiter?使用 WHERE 分隔符选择多列时出现 MySQL 语法错误?
【发布时间】:2011-11-23 11:34:24
【问题描述】:

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

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

我很困惑,因为我根本看不到任何地方的语法错误:

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() 与其他代码多次使用并且运行良好。请帮忙。

【问题讨论】:

  • 1) 我认为您不必以分号结束您的 SQL 语句 2) 您确定逗号实际上是逗号 3) 您是否尝试过输出生成的查询并在 phpmyadmin 中运行它?

标签: php mysql sql ajax database


【解决方案1】:

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

$this->query("SELECT name, `desc`, price FROM products WHERE id='".$id."';")

请参阅the MySQL manual on reserved words 以获取几乎相同的示例,以及有关如何处理关键字的更多详细信息。

或者您可以将您的列重命名为“描述”,例如。就像引用是“正确”的解决方案一样,如果可以的话,避免使用保留字作为列名通常会有所帮助。

【讨论】:

  • 非常感谢,我不敢相信我没有注意到(我之前什至用它来对数据进行排序)!我要更改表名。谢谢。
【解决方案2】:

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

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

【讨论】:

  • 别担心,我已经转义了输入,这个功能只有管理员可以访问:-)
猜你喜欢
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多