SQL ORDER BY变量参数[重复]

This question already has an answer here:

I can't find how to use a variable as a parameter of the ORDER BY selector : the following code doesn't work.

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

whereas

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

works.

Since I'd like to put this code in a function with $orderBy as a parameter, it would be really convenient to find a way to tackle this problem...

</div>

I don't think you can :

  • Use placeholders in an order by clause
  • Bind column names : you can only bind values -- or variables, and have their value injected in the prepared statement.

You can use just variables tho, like

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

Whats wrong with directly putting it int the string?

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

EDIT: Of course $orderBy has to be escape to avoid injections (PDO::quote()).