首页  >  文章  >  数据库  >  为了安全起见,准备好的语句是否需要`mysql_real_escape_string()`?

为了安全起见,准备好的语句是否需要`mysql_real_escape_string()`?

Patricia Arquette
Patricia Arquette原创
2024-11-01 23:50:29197浏览

Do Prepared Statements Need `mysql_real_escape_string()` for Security?

在Prepared语句中使用mysql_real_escape_string

问题:

使用prepared语句时是否需要使用mysql_real_escape_string()函数用于数据库查询的语句?

上下文:

提供的代码演示了使用 mysqli 库的准备好的语句查询。然而,它目前使用 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();</code>

答案:

不,准备好的语句提供了针对 SQL 注入的固有保护,并且正确使用时的数据操作。它们会自动清理输入,使 mysql_real_escape_string() 变得多余。

改进:

虽然查询正确使用准备好的语句,但较小的修改可以提高其效率。可以不使用bind_param()方法,而是直接使用execute()方法传递参数。

<code class="php">$sql->execute([$consulta]);</code>

补充说明:

虽然prepared statements protected针对SQL注入,它们在输出到页面时不能保证数据的安全性。为了防止潜在的跨站脚本(XSS)攻击,建议在将数据输出到浏览器之前使用 htmlspecialchars() 对任何数据进行 HTML 编码。

以上是为了安全起见,准备好的语句是否需要`mysql_real_escape_string()`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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