当前位置: 首页 > 面试题库 >

为什么使用mysql预处理语句比使用普通转义功能更安全?

裴永年
2023-03-14
问题内容

在另一个问题中有一条评论说:

“涉及数据库查询时,请始终尝试使用准备好的参数化查询。mysqli和PDO库支持此操作。这比使用转义函数(例如mysql_real_escape_string)更加安全。”

资源

因此,我想问的是:为什么准备好的参数化查询更安全?


问题答案:

我认为这里的人们所缺少的重要一点是,有了支持参数化查询的数据库,就不必担心“转义”。数据库引擎不会将绑定的变量组合到SQL语句中,然后再分析整个内容。绑定变量保持独立,并且永远不会解析为通用SQL语句。

这就是安全性和速度的来源。数据库引擎知道占位符仅包含数据,因此永远不会将其解析为完整的SQL语句。当您一次准备一条语句然后执行多次时,就会提速。典型示例是将多个记录插入到同一表中。在这种情况下,数据库引擎仅需要解析,优化等一次。

现在,数据库抽象库是一个难题。他们有时只是通过以适当的转义将绑定变量插入SQL语句中来伪造它。尽管如此,这总比自己动手做更好。



 类似资料:
  • 主要内容:预处理语句及绑定参数,MySQLi 预处理语句,实例 (MySQLi 使用预处理语句),PDO 中的预处理语句,实例 (PDO 使用预处理语句)预处理语句对于防止 MySQL 注入是非常有用的。 预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如: 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。 执行:最后,将应用绑定的

  • 我对Hystrix的主题和弹性服务的概念真的很陌生,我正在经历一些课程,这个问题出现在我的脑海中。 在Hystrix中,我需要为一个优雅的降级定义回退方法,然后当电路断开时调用该方法。但是我可以想象一下,只需用和包装代码,当出现特定异常时(例如超时),在子句中调用fallback方法。当被调用的服务启动时,将调用正常代码。 当然,使用Hystrix我可以额外监控这一点,但它还能给我什么?。我很确定

  • 本文向大家介绍MySQL中预处理语句prepare、execute与deallocate的使用教程,包括了MySQL中预处理语句prepare、execute与deallocate的使用教程的使用技巧和注意事项,需要的朋友参考一下 前言 MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT,我习惯称其为【预处理语句】,其用法十分简单,下面话不

  • 我正在尝试更新名为的数据库中名为的表。该表的主键是。 当我运行以下语句时: 我收到一个错误,上面写着“您正在使用安全更新模式,并且您试图更新一个没有使用键列的WHERE的表。” 我在谷歌上搜索了那个错误消息,大多数回复都是“你必须使用子句或关闭安全模式”。但正如您所看到的,我使用的是子句。如果我有子句,为什么会出现错误? MySQL服务器版本5.6。20

  • 问题内容: 我已经编写了一条准备好的语句,但是它在?处给出了语法错误。我无法理解到底出了什么问题,它应该传递电影名称并作为该电影的导演获得结果 问题答案: 问题在这里: 您不应该将SQL传递给,因为准备好的语句已经包含SQL ,且占位符由的值代替。 用:

  • 问题内容: 我已经习惯了MSSQL,而不是Mysql,所以对这个可能很愚蠢的问题感到抱歉。我正在尝试通过运行以下查询来更新备份数据库的密码: 当我运行它时,它说 查询正常,受影响的0行(0.01秒)匹配的行:1已更改:0警告:0 为什么行匹配但没有变化? 问题答案: 这意味着该值未更改。由于该列已等于的md5哈希值,因此可能未更改。