PDO、Mysql 和本机准备好的语句

2024-04-01

到目前为止我对 PDO 的理解是,PDO 将在可以的地方使用真正的准备好的语句,在不能的地方模拟它们。我还了解到,就 mysql 而言,如果您正在与支持它们的 mysql 版本进行通信,则将使用真正准备好的语句。

事实上,MySQL PDO 驱动程序的 PHP 手册页也说了同样的内容。http://php.net/manual/en/ref.pdo-mysql.php http://php.net/manual/en/ref.pdo-mysql.php

然而,在另一个问题上我正在帮忙如何用数组中的元素替换所有出现的 char? https://stackoverflow.com/questions/8294585/how-to-replace-all-occurencies-of-char-with-elements-from-array,有人评论说这不是真的,事实上 PDO 在与 MySQL 数据库对话时模拟准备好的语句。

我没有太多运气找到证据来支持其中提出的主张,但我确实发现有一个 PDO::ATTR_EMULATE_PREPARES 属性可以配置为切换准备好的语句模拟。

那么事情的真相是什么呢? PDO 真的不使用 mysql 的准备语句吗?如果不可以,是否可以强制这样做?如果可以,是否应该这样做?我一直认为 mysql 有真正准备好的语句,PDO 会使用它们,正如手册中所声称的那样。说明书不准确吗?

编辑添加:我最近读了几篇文章,至少给出了为什么默认情况下禁用真正准备好的查询的合理理由。 PHP 脚本的生命周期往往很短,仅运行足够长的时间才能生成对请求的响应,之后所有资源都会被释放。对于每个请求只执行一次的任何查询,您实际上必须执行 2 个 SQL 命令(准备命令和执行命令),因此对于只执行一次的任何准备好的语句,您实际上可能会获得比模拟的性能稍差的性能准备好的声明。对于必须在循环中运行的查询,真正的准备好的语句可能会执行得更好,但这种情况在 PHP 通常使用的请求/响应模型类型中相对较少。

我仍然认为真正的准备好的语句更好,但至少我对为什么 PDO 默认使用模拟查询有一个合理的解释。


PDO 真的不使用 mysql 的准备语句吗?

是的,默认情况下(至少在我测试的版本中),但可以手动打开本机模式。

如果不是,是否可以强制这样做

通过雇用PDO::ATTR_EMULATE_PREPARES设置,这个名字很不言自明。

$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

你应该这样做吗?

这是所有问题中最难的问题。
好吧,我会说 - 是的,你应该这样做。如果您选择 PDO 作为数据库驱动程序,则在仿真模式下使用它是没有意义的。

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

PDO、Mysql 和本机准备好的语句 的相关文章

  • 无法访问 localhost/xampp/index.php

    我刚刚安装了 Windows 7 的 XAMPP 控制面板似乎工作正常 我启动了 MySql 和 Apache 我遇到的问题是 当我在浏览器 Google Chrome 中输入 localhost 时 它会将我发送到 http localh
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • 您的要求无法解析为 laravel 的一组可安装软件包

    我使用 5 7v Laravel 和 7 2 1v PHP 和 Composer 最新版本 但是当我想创建新项目时出现这些错误 Your requirements could not be resolved to an installabl
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • PHP 编码风格回归;在开关/外壳中

    我们正在尝试为我们的团队实施新的编码风格指南 当未找到 break 时 php codeniffer 会在 switch case 语句上打印警告 如下所示 switch foo case 1 return 1 case 2 return
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • PHP 拒绝从 var_dump、print 等输出数据

    我目前正在运行 WAMP 服务器 并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据 起初我以为是因为我有一个 htaccess文件的output buffering被禁用 所以我删除了它 仍然
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • PHP更改小数点分隔符

    在某些情况下 PHP 会在操作后更改小数点分隔符 下面是一个示例 为什么小数点分隔符变成 这是一个多语言网站 在西班牙语版本中 区域设置设置为西班牙语 es ES 小数点分隔符为 这就是为什么正在改变 解决方案是强制 LC NUMERIC

随机推荐

  • 打开的连接数以及连接睡眠状态的含义

    我在我的数据库中运行了这个查询 SELECT DB NAME dbid as DBName COUNT dbid as NumberOfConnections loginame as LoginName FROM sys sysproces
  • 防止正文滚动(移动设备、本机浏览器)

    在 Samsung Galaxy S5 S6 的本机浏览器上 以下 CSS 片段 body overflow hidden 不会阻止主体滚动 有解决方法吗 编辑 如下所述 这也可以通过添加溢出 隐藏到 html 标签来完成 但这引入了窗口滚
  • 如何显示MapKit指南针?

    目前 指南针仅在以下情况下才会显示用户应用旋转手势 否则指南针将被隐藏 不过如果能实现我下面的两个愿望就好了 是否可以一直显示指南针 如何使用 Swift 显示 隐藏指南针视图 您可以在 iOS 11 中使用新功能轻松完成此操作MKComp
  • 一维字符串数组被角度资源解析为二维

    来自服务器的以下 JSON 响应 hello world 正在被 ngResource 服务解析为二维数组 myService factory Name function resource return resource site url
  • Perl 中的 my 和 local 有什么区别?

    我看到它们都用在我正在尝试调试的脚本中 但文献还不清楚 有人能为我揭开这个神秘面纱吗 简短的回答是my将变量标记为词法范围内的私有变量 并且local将动态范围内的变量标记为私有 更容易理解my 因为这会创建通常意义上的局部变量 创建了一个
  • 如何设置依赖gradle任务的属性

    我想设置一个 通用 任务 它将为多个平台构建应用程序包 它使用 javafxpackager 该任务的机制适用于创建所有平台捆绑包 但区别在于任务使用的各种属性 我原以为我会为每个平台创建单独的更高级别的任务 在其中设置平台特定的属性 然后
  • 检测ajax请求

    我正在编写自己的 MVC 框架来练习 并且我有一个 Request 类 我想捕获请求的类型并相应地解析数据 无论是 AJAX JSON 调用还是 HTML XML 请求 我目前使用 SERVER HTTP ACCEPT 以及上面使用 var
  • 了解 SQL Profiler 中的读/写次数

    请参阅此 SQL Profiler 视图中指示的 SQL 语句 所有这些事件都来自一台客户端计算机 该计算机正忙于长时间运行的进程 处理数千行 每次处理一行大约需要 6 5 秒 这是 SQL Profiler 显示的注销之间的时间 尽管实际
  • 如何删除python中的文件夹? rmtree 错误

    我最近遇到了这个麻烦 我需要一个功能来删除 Windows 中的整个文件夹 所以我进行了搜索 这就是我得到的 如何使用 Python 删除 删除不为空的文件夹 https stackoverflow com questions 303200
  • 无法从 IEnumerable 转换为 ICollection

    我定义了以下内容 public ICollection
  • 如何将 unique_ptr 的向量声明为类数据成员?

    我想要一个 unique ptr 的向量作为我正在创建的类的成员 class Foo private vector
  • 曲线与分段函数拟合?

    正如标题所示 我正在尝试用分段函数进行曲线拟合 这是一个例子 import numpy as np import scipy optimize as sio x np array 0 1 2 3 4 5 y np array 2 3 4 1
  • 如何使用 mpl_toolkits.basemap.cm 中的颜色图创建离散颜色条?

    当我绘制 pcolormesh 图时使用颜色图from matplotlib cm like jet Set2 等 我可以使用 cMap plt cm get cmap jet lut 6 颜色条显示如下 但是如果我想从Basemap包 如
  • 以编程方式打开 Apple Health

    是否可以像使用 设置 应用程序一样以编程方式打开 健康 应用程序 如果无法直接打开应用程序的 Apple Health 权限屏幕 我们至少可以打开 Apple Health 主屏幕吗 Edit 我知道我无法再次请求权限 就像相机访问等其他操
  • Jetty mysql 连接池配置错误:javax.naming.NameNotFoundException;剩余名称'env/jdbc/---(mysql 5.0+jetty 7.0.1)

    我的配置文件 项目 WEB INF web xml
  • 如何在 ActionScript 3 中从缓冲区(ByteArray/Stream)播放 MP3 声音?

    所以 我有一个MP3 数据缓冲区 如果我保存此缓冲区并将其命名为 buffer mp3 它就会播放 但在这种情况下我不应该将其保存到文件系统 我必须玩 但我不能 我该怎么办 我尝试了下一个代码来播放该缓冲区 ByteArray Stream
  • PHP DOTNET 地狱

    我是 PHP 的新手 今天我发现DOTNET http php net manual en class dotnet php class 所以我学习了手册 上网寻找一些例子 最后编写了我的测试应用程序 使用 Framework 4 0 Cl
  • PHP 初学者之类继承

    class User public company name class Employer extends User public fname public sname 这是我创建的 test php 我已经包含了类文件 employer
  • autoreleasepool 未在此范围内声明错误

    我的项目是 XCode 4 2 该项目编译为常规调试版本 但是当我将构建类型更改为分析 我想分析内存使用情况 时 我从这个 Objective C C 类中收到错误 Volumes mchinen scm Voicer FilterAudi
  • PDO、Mysql 和本机准备好的语句

    到目前为止我对 PDO 的理解是 PDO 将在可以的地方使用真正的准备好的语句 在不能的地方模拟它们 我还了解到 就 mysql 而言 如果您正在与支持它们的 mysql 版本进行通信 则将使用真正准备好的语句 事实上 MySQL PDO