0

我正在使用 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);
4

1 回答 1

2

绑定参数用于您要传递到查询中的实际数据。你不能绑定实际的控制命令——MySQL 会将它们解释为数据,而不是命令。

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

于 2012-11-09T16:42:48.943 回答