SQL ORDER BY变量参数

时间:2013-12-26 14:09:29

标签: php sql sql-order-by

我找不到如何使用变量作为ORDER BY选择器的参数:以下代码不起作用。

$orderBy = 'number';
$q = $instanceBDD->prepare('SELECT * FROM operations ORDER BY :orderBy ASC', 
                           array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$q->execute(array('orderBy' => $orderBy));

,而

$q = $instanceBDD->prepare('SELECT * FROM operations ORDER BY number ASC',
                   array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$q->execute();

作品。

由于我想将这个代码放在一个以$ orderBy作为参数的函数中,找到解决这个问题的方法真的很方便......

2 个答案:

答案 0 :(得分:1)

将字符串直接放入字符串有什么问题?

$q = $instanceBDD->prepare('SELECT * FROM operations ORDER BY '.$orderBy.' ASC',
    array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

编辑:当然必须逃避$orderBy以避免注入(PDO::quote())。

答案 1 :(得分:0)

我认为你不能:

  • 在order by clause
  • 中使用占位符
  • 绑定列名:您只能绑定值 - 或变量,并在预准备语句中注入其值。

你可以只使用变量,比如

$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders));
$order=$orders[$key];
$instanceBDD->prepare("SELECT * FROM operations ORDER BY '$order' ASC');