使用PDO的MySQL查询选项的预准备语句

时间:2012-11-09 16:39:05

标签: php mysql pdo prepared-statement

我正在使用PDO并提供用户可以使用搜索结果选择的选项。一些示例是排序,结果数量,页码等。我尝试使用预准备语句来验证此数据以防止SQL注入攻击,但变量永远不会传递到查询中。

我做错了什么?结果排序和结果数是SELECT菜单,页码是一个文本输入表单,可以输入数字。

$query = "SELECT SQL_CALC_FOUND_ROWS * FROM people ORDER BY id :sortBy LIMIT $start, :total";
$result = $conn->prepare($query);
$result->bindValue(":sortBy", $sortBy, PDO::PARAM_STR);
$result->bindValue(":total", $total, PDO::PARAM_INT);

1 个答案:

答案 0 :(得分:2)

绑定参数用于您要传递给查询的实际数据。您无法绑定实际的控制命令--MySQL会将它们解释为数据,而不是命令。

您可以做的事情是检查您发送的内容,并将“ASC”或“DESC”传递给查询。您没有将用户提供的信息传递给查询 - 而是用于确定要传递的一组预定义命令中的哪一个。没有注入风险。