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

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

Patricia Arquette
发布: 2024-11-01 23:50:29
原创
287 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板