【发布时间】:2011-05-25 18:15:16
【问题描述】:
我有一个包含大量数据的 Web 应用程序,以及一个包含多个字段(例如名称、状态、日期等)的搜索/过滤功能。我一直在对常规(非搜索)查询使用这样的参数化查询:
$id = $_POST['itemID'];
$db = mysqli_connect($host, $username, $password, $database);
$sql_query = "SELECT * FROM tbl_data WHERE ID = ?";
$stmt_query = mysqli_prepare($db, $sql_query);
mysqli_stmt_bind_params($stmt_query, "i", $id);
mysqli_stmt_execute($stmt_query);
//and so on..
如何使用多个可选参数防止 SQL 注入?最多可以设置 10 个单独的参数,可以设置也可以不设置。
在问题似乎不清楚时进行编辑:
我的示例是一个参数,它不是可选的。我知道这可以防止 sql 注入。我将如何使用 10 个参数来执行此操作,其中一个或多个可以同时设置?例如。像这样的查询:
SELECT * FROM tbl_data
WHERE NAME = ?
AND STATUS = ?
AND DATE = ?
AND PARAM4 = ?
AND PARAM5 = ?
用户只想搜索姓名和日期。我将如何进行绑定?检查 100 种可能的搜索词组合中的每一种并不是一个好主意。
【问题讨论】:
-
您在准备好的语句上使用绑定参数,因此您会自动受到 sql 注入保护。 SQL 注入仅在您使用源自用户提交的未检查(非转义)内容将查询构建为字符串时才会出现。绑定的参数会被数据库驱动自动转义,所以你不用担心。
-
@Lee,不,他不是。在这种特殊情况下,不必担心。
标签: php mysql sql-injection optional-parameters