MySQL PHP PDO 准备好的语句 - 性能问题与安全性

2023-11-26

我正在考虑使用 InnoDB(现在是 mysql_query 和 MyISAM)将一些开源应用程序重写为 PDO 和事务。

我的问题是:哪些情况下使用准备好的语句是合理的?

因为我读到的所有地方都指出(甚至在这里的许多帖子中),我应该随时随地使用准备好的语句,因为 1. 安全性和 2. 性能。甚至 PHP 手册也建议使用准备好的语句并且不要提及转义。

你不能否认安全机制。但一遍又一遍地思考,我想到每次都必须准备该语句,然后使用它一次......这没有意义。虽然必须在单个语句中插入 1000 次某些变量,但这是有道理的,但很明显。但这并不是常见的网上商店或论坛的基础。

那么如何克服这个问题呢?我可以在整个应用程序范围内准备我的声明并具体命名它们吗?我可以准备几个不同的语句并按名称使用它们吗?因为这是我想到的唯一合理的解决方案(除了 1000x 的事情)。

我发现有一个名为 $pdo->quote 的 mysql_real_escape 也用于单个查询。为什么不使用这个呢?何必费心去准备呢?

您对这篇优秀文章有何看法?http://blog.ulf-wendel.de/2008/pdo_mysqlnd-prepared-statements-again/

您同意准备报表所造成的开销吗?

Thanks


我认为这属于“过早优化”类别。

开销有多大?你测量过吗?它会影响您的服务器性能吗?

很可能事实并非如此。


从好的方面来说,您在安全性方面获得了不可否认的收益(这应该是任何基于互联网的商店的主要关注点)。

不利的一面是,您可能会面临影响性能的风险。在您提供的链接中,它表明在某些情况下,实施不当的 PDO 准备会导致性能比未准备的语句稍低。 5000 次运行的性能差异为 0.298 秒。

微不足道。当您意识到运行“未准备”的查询时更是如此without确保它们在现场环境中安全所需的输入清理例程。如果您不使用准备好的查询,则需要某种形式的输入清理来防止 SQL 攻击,并且根据其完成方​​式,您可能需要恢复结果集。

最重要的是,不存在重大的性能问题,但具有显着的安全优势。因此官方建议使用准备好的语句。

在你的问题中,你提到了“常见的电子商店”。 “普通eshop”永远不会有足够的流量来担心性能问题(如果有的话)。另一端的安全问题......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL PHP PDO 准备好的语句 - 性能问题与安全性 的相关文章

  • 获取 YouTube 最高缩略图分辨率

    我想获得 youtube 最高缩略图 maxresdefault jpg 像这个 http i ytimg com vi Cj6ho1 G6tw maxresdefault jpg http i ytimg com vi Cj6ho1 G6
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Facebook PHP-SDK 页面刷新后似乎丢失了 userID

    我似乎登录工作正常 我可以登录 接受应用程序 第一次 然后显示用户信息 例如姓名 图片 等 然而 当我刷新页面时 userid 又回到 0 我必须再次登录 我不确定问题是什么 我必须在每次页面加载时重新启动它还是什么 我不知道 我会发布一些
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • php - 解析html页面

    div divbox div p para1 p p para2 p p para3 p table class table tr td td tr table p para4 p p para5 p 有人可以告诉我如何解析这个 html
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • PayPal 网关已拒绝请求。安全标头无效(#10002:安全错误 Magento

    在 magento 中增加 PayPal 预付款 我已填写 magento admin 中的所有凭据 但是当我进入前端并单击 pay pal 按钮时 它给出了 PayPal 网关已拒绝请求 安全标头无效 10002 安全错误 我用谷歌搜索了
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • 如何使用 jQuery 检测页面是否已完全渲染?

    使用时 document ready functioon alert Loaded 它会弹出警告框 上面写着 已加载 甚至before页面已完全加载 换句话说 加载仍在继续 就像图像一样 有什么想法吗 window on load func
  • 复制嵌套自定义对象:深度复制的替代方案

    我正在寻找一个包含类对象列表的类对象的深层副本 每个类对象都有自己的一组内容 这些对象不包含任何比整数和列表更令人兴奋的东西 没有字典 没有等待生成的生成器等 我正在一个循环中对 500 800 个对象执行深度复制 这确实减慢了程序速度 我
  • 通过互操作在 Excel 中绘制网格线

    知道在互操作中使用 Excel 2003 时关闭网格线的设置隐藏在哪里吗 DisplayGridlines 是 Excel Window 对象上的一种方法 例如 ActiveWindow DisplayGridlines true
  • 有没有办法将命名参数传递给格式宏而不重复变量名称?

    使用 Rust 的新版本 您可以像这样简化结构初始化 Foo a a b b to this Foo a b 是否可以做类似的事情format println 类似宏 现在我需要这样写 let a a let b b write file
  • JavaFX:最初从 FXML 加载场景时,在 java 代码中向场景添加新节点

    当场景最初从 FXML 加载时 如何在 java 代码中向场景添加新节点 我已经从 FXML 加载 如下所示 Parent root FXMLLoader load getClass getResource sample fxml Scen
  • MySQL 选择列名作为字段

    我有一个 mysql 表 看起来像这样 id col 1 col 2 col 3 1 2 34 64 2 6 53 23 我希望能够查询 id 并获取多行 每一列一行 例如 SELECT column name as column colu
  • 如何从图形中删除框架

    要删除图中的框架 我写 frameon False 完美配合pyplot figure 但与matplotlib Figure它仅删除灰色背景 框架保持不变 另外 我只希望线条显示 图形的所有其余部分都是透明的 使用 pyplot 我可以做
  • 使用 Python pdfMiner 提取每页文本?

    我尝试过使用 pypdf 和 pdfMiner 从 PDF 文件中提取文本 我有一些不友好的 PDF 只有 pdfMiner 才能成功提取 我正在使用代码here提取整个文件的文本 但是 我真的很想在每页的基础上提取文本 例如pages i
  • git svn 与 git 子树兼容吗?

    现在 git subtree 已经合并到核心 git 发行版中 从 1 8 0 开始它也在 Msysgit 上 有谁知道 git svn 是否可以与 git subtree 一起使用 注意 我不是在谈论子树合并策略 而是关于this 使用
  • 很长的单词无法在 HTML/CSS 中换行

    我遇到一个问题 如果用户输入长评论 单词 例如 coooooooooooooooooooooooooooooooooooooool 这会破坏页面上的格式 下面是帮助解释场景 未按比例 以及所使用的代码的图像 Html div class c
  • Firebase child_added 仅添加子项

    来自 Firebase API 添加子项 每个初始子项都会触发该事件一次 在此位置 每次有新的触发时都会再次触发 添加了孩子 一些代码 listRef on child added function childSnapshot prevCh
  • 使用 google-play-services_lib 添加 admob 广告后 Android 应用程序大小增加

    我将发布我的应用程序的两个版本 付费版本和免费版本 带有 AdMob 广告 除了我在 AdMob 服务的免费版本中使用的 google play service lib 之外 这两个版本完全相同 使用proguard后最终的apk大小是 付
  • 为什么在 Java 中将数组声明为 Final 不会使其不可变?

    为什么在 Java 中将数组声明为 Final 不会使其不可变 宣布某件事是最终的不是意味着它不能改变吗 From 关于不可变数组的问题很明显 将数组声明为final并不意味着它就不可更改 以下是可能的 final int array ne
  • 如何修改只读属性(element.classList)或将其分配给javascript中的其他值?

    window addEventListener keydown function e const key document querySelector div data key e keyCode console log key class
  • 用实际的 jQuery 改变角度 jQLite

    我希望 AngularJS 默认使用 jQuery 而不是 jQLite 是否可以 因此 在指令链接函数中 link function scope element attrs ngModel element必须是 jQuery 对象 现在我
  • 在 Docker 中运行 mysql_upgrade?

    我试图使用以下命令创建用户 docker exec i database mysql uroot proot e CREATE USER dbadmin 但是我遇到了这个错误 ERROR 1054 42S22 at line 1 Unkno
  • RecyclerView OnScrollListener() 问题

    我有大约 32 条 json 记录 我使用 RecyclerView 来显示它们 并且我已经实现了 OnScrollListener Question 我启动了一个 Activity 我获取了所有 32 条记录 现在当我滚动时 为什么我再次
  • Perl CGI 通过网络浏览器下载文件

    需要一些可以从服务器计算机下载文件的 cgi perl 脚本 EX 单击下载链接 它将打开 另存为 窗口并允许我将文件保存在本地计算机上 我已经使用 CGI 创建了一个网页 使用它我将上传一个文件到服务器 并运行一个 perl 脚本将其转换
  • 使用 python 对列表中相同键的多个值求和

    我有一个如下所示的列表 151258350 2464 151258350 56 151262958 56 151258350 56 151262958 112 151262958 112 151259627 56 151262958 112
  • MySQL PHP PDO 准备好的语句 - 性能问题与安全性

    我正在考虑使用 InnoDB 现在是 mysql query 和 MyISAM 将一些开源应用程序重写为 PDO 和事务 我的问题是 哪些情况下使用准备好的语句是合理的 因为我读到的所有地方都指出 甚至在这里的许多帖子中 我应该随时随地使用