PDO“ORDER BY”仅在硬编码时有效

时间:2013-09-01 22:05:46

标签: php mysql post pdo

我想用PDO从MySQL数据库中获取结果。用户应该能够通过tablerow按哪种类型(升序或降序)对它们进行排序。这似乎只有在你硬编码时才有效。

有效吗

$query = "SELECT * FROM ".$config->dbPrefix."content 
          WHERE cat_id = 2
          ORDER BY id DESC
";
$query = $pdo->prepare($query);
$query->execute();
$result = $query->fetchAll();

不起作用:

$orderRow = 'id'; //from $_POST
$orderType = 'DESC' //from $_POST

$query = "SELECT * FROM ".$config->dbPrefix."content 
          WHERE cat_id = 2
          ORDER BY :orderRow :orderType
";
$query = $pdo->prepare($query);
$query->bindValue(':orderRow', $orderRow);
$query->bindValue(':orderType', $orderType);
$query->execute();
$result = $query->fetchAll();

所以我的问题是:最好的方法是什么?为什么不实施?

我能想到的最好方法是使用switch语句并为每个不同的选项编写查询,这些选项会有14种不同的可用案例。

1 个答案:

答案 0 :(得分:1)

您只能为SQL语句中的值提供占位符,而不能为列名或其他类型的标识符提供占位符。

因此,不要使用bindValue,而是将值与#config->dbPrefix中的值一样直接放入字符串中。但请确保不能进行SQL注入。