我找不到如何使用变量作为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作为参数的函数中,找到解决这个问题的方法真的很方便......
答案 0 :(得分:1)
将字符串直接放入字符串有什么问题?
$q = $instanceBDD->prepare('SELECT * FROM operations ORDER BY '.$orderBy.' ASC',
array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
编辑:当然必须逃避$orderBy
以避免注入(PDO::quote()
)。
答案 1 :(得分:0)
我认为你不能:
你可以只使用变量,比如
$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders));
$order=$orders[$key];
$instanceBDD->prepare("SELECT * FROM operations ORDER BY '$order' ASC');