如何使用多字段搜索并防止SQL注入


How to use multiple field search and prevent from sql injection

我正在构建一个带有多个搜索参数的HTML表单。提交时,我使用发送的值来构建查询。代码如下所示:

....
$keyword1 = mysqli_real_escape_string($_POST['keyword1']);
$keyword2 = mysqli_real_escape_string($_POST['keyword2']);
$sql = "SELECT * FROM myTable 
        WHERE field1 LIKE '%$keyword1%' 
        OR field2 LIKE '%$keyword2%'..."
$result = mysql_query($query);
while...etc

这感觉像是一个安全问题,因为 LIKE "%%"条件。我已经在这个网站上搜索了答案,解决方案似乎是准备好的陈述。但是,我找到的所有示例都在语句中使用等号 (=)。如果我在查询中使用 LIKE,预准备语句对 SQL 注入没有帮助?右?

任何代码建议都值得赞赏。

LIKE比较的唯一额外安全问题是通配符本身不会被转义。

如果用户在输入中包含额外通配符的可能性是一个问题,您可以使用str_replace删除它们:

$keyword1 = str_replace('%','',$keyword1);

无论您是使用mysqli预准备语句还是直接使用mysqli_real_escape_string在这里都不应该有所不同。