【问题标题】:PHP exception: SQLSTATE[42000]: Syntax error or access violation: 1064PHP 异常:SQLSTATE[42000]:语法错误或访问冲突:1064
【发布时间】:2016-08-01 09:49:20
【问题描述】:

我有一个 php pdo 脚本,我想在其中选择“field5”中编号最高的记录(从 MySQL 数据库中的表中)。我还有其他一些限制,见下文:

 $stmt=$db->query("SELECT `field1`,`field2` FROM ".$tablename." WHERE
 `field3`!=".$variable1." AND `field3`!=".$variable2." AND
 `field4`='xx' AND `field5`<".$variable3." ORDER BY DESC `field5` LIMIT
 1");

我在 try 语句中拥有几乎所有的代码,并且在我使用的 catch 语句中

var_dump($ex->getMessage());

从异常 $ex 中获取异常消息。

现在,当我执行代码时,我收到以下异常消息:

'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'DESC field5 附近使用正确的语法 LIMIT 1' 在第 3' 行(长度=232)

如果您能就可能出现的问题提供任何建议,我将不胜感激!

【问题讨论】:

  • 天哪,如果您已经在使用 PDO,请使用准备好的语句...

标签: php mysql pdo


【解决方案1】:

改变

ORDER BY DESC field5

进入

ORDER BY field5 DESC

【讨论】:

    【解决方案2】:

    请参阅MySQL manual 了解选择查询的语法。您犯了一个简单的错误,即查询语法错误。您只能通过最初引用来对列进行排序:

    ORDER BY '{Column-Name}'

    然后只有您可以定义如何在 ASC 或 DESC 中对其进行排序。

    ORDER BY '{Column-Name}' [ASC|DESC]

    所以你必须改变查询,如下所示:

    $stmt=$db->query("SELECT `field1`,`field2` FROM ".$tablename." WHERE
     `field3`!=".$variable1." AND `field3`!=".$variable2." AND
     `field4`='xx' AND `field5`<".$variable3." ORDER BY `field5` DESC 
    LIMIT 1");
    

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 2014-10-30
      • 2018-07-02
      • 2022-01-25
      • 1970-01-01
      • 2017-10-29
      • 2014-01-14
      相关资源
      最近更新 更多