首页 >数据库 >mysql教程 >准备好的语句还需要 mysql_real_escape_string() 吗?

准备好的语句还需要 mysql_real_escape_string() 吗?

Linda Hamilton
Linda Hamilton原创
2024-11-02 07:50:02862浏览

Is mysql_real_escape_string() Still Necessary with Prepared Statements?

转义准备语句中的字符串:mysql_real_escape_string()的必要性

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn