使用 SQL 查询时,通过转义用户提供的输入来防范 SQL 注入攻击至关重要。问题出现了:在使用准备好的语句时,mysql_real_escape_string()函数仍然是必要的吗?
在给定的查询中:
<code class="php">$consulta = $_REQUEST["term"]."%"; $sql = $db->prepare('select location from location_job where location like ?'); $sql->bind_param('s', $consulta); $sql->execute(); $sql->bind_result($location); $data = array(); while ($sql->fetch()) { $data[] = array('label' => $location); }</code>
准备好的语句通过将数据与查询分离来增强 SQL 安全性,防止恶意注入。但是,它不会使 mysql_real_escape_string() 过时。
为了确保数据输入不会改变查询,对代码进行简单修改可以进一步保护它:
<code class="php">$sql->execute([$consulta]);</code>
This更改利用“?”直接通过执行方法传递参数占位符。但是,请记住在输出之前通过 htmlspecialchars() 处理用户输入,以防御 HTML 注入攻击。
通过遵守正确的预准备语句用法,您可以消除对 mysql_real_escape_string() 的需要并增强 SQL 查询的安全性.
以上是准备好的语句还需要 mysql_real_escape_string() 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!