2

我想用 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 个不同的可用案例。

4

1 回答 1

1

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

因此bindValue,不要像使用 for 那样将值#config->dbPrefix直接放入字符串中。但是请确保没有 SQL 注入是可能的。

于 2013-09-01T22:11:33.430 回答