具有LEFT JOIN和ORDER BY的PDO

时间:2013-03-23 03:04:34

标签: php mysql pdo

我有这段代码

$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并确保我的表格符合我的要求?

2 个答案:

答案 0 :(得分:2)

使用预准备语句无法绑定列名。

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

$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."%") ) )

答案 1 :(得分:0)

来自Stackoverflow PDO代码wiki - 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