【问题标题】:PDO with LEFT JOIN and ORDER BY [duplicate]带有 LEFT JOIN 和 ORDER BY 的 PDO [重复]
【发布时间】:2013-03-13 01:11:46
【问题描述】:

我有这个代码

$query_search = $this->db->prepare("SELECT* FROM table1 LEFT JOIN table2 ON (table1.id=table2.id) WHERE table1.nome LIKE ?  ORDER BY ? DESC");
if($query_search->execute(array($cliente_procura."%",'table2.'.$ordem)))
{
   //code
}

但我在使用ORDER BY 子句时遇到了一些问题。 如何使用 PDO 并确保我的表格按我想要的顺序排列?

【问题讨论】:

  • 您遇到了什么问题?有什么错误吗?
  • 不能这样绑定字段名。

标签: php mysql pdo


【解决方案1】:

准备好的语句无法绑定列名。

您需要使用古老的方法将它们绑定在这样的字符串中:

$query_search = $this->db->prepare(" SELECT * 
        FROM table1 
        LEFT JOIN table2 
            ON (table1.id=table2.id) 
        WHERE table1.nome 
        LIKE ?  
        ORDER BY table2." . $ordem . " DESC");
if( $query_search->execute( array($cliente_procura."%") ) )

【讨论】:

    【解决方案2】:

    来自 Stackoverflow PDO 标签维基 - https://stackoverflow.com/tags/pdo/info

    PDO 准备好的语句和标识符。

    PDO 没有标识符的占位符,因此开发人员必须手动 格式化它们。要正确格式化标识符,请遵循以下两条规则:

    *将标识符括在反引号中。
    *通过将它们加倍来避免内部的反引号。

    见 - Can PHP PDO Statements accept the table or column name as parameter?
    或 - Which tokens can be parameterized in PDO prepared statements?

    另请参阅 php 手册中的此评论/示例 - http://us3.php.net/manual/en/book.pdo.php#69304

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多