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