PDO::ERRMODE_EXCEPTION 不会抑制警告

2023-11-25

http://php.net/manual/en/pdo.error-handling.php

PDO::ERRMODE_WARNING

除了设置错误代码之外,PDO 还会发出传统的 E_WARNING 消息。如果您只想在不中断应用程序流程的情况下查看发生了什么问题,则此设置在调试/测试期间非常有用。

PDO::ERRMODE_EXCEPTION

除了设置错误代码之外,PDO 还会抛出 PDOException 并设置其属性来反映错误代码和错误信息。此设置在调试期间也很有用,因为它会在错误点有效地“炸毁”脚本,很快指出代码中潜在的问题区域(请记住:如果异常导致事务发生,事务会自动回滚)终止脚本)。

异常模式也很有用,因为与传统的 PHP 样式警告相比,您可以更清晰地构造错误处理,并且比在静默模式下运行并显式检查每个数据库调用的返回值更少的代码/嵌套。

然而,代码:

$connection = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '***');
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$connection->query('SET wait_timeout=1;');
sleep(2);

try {
    $connection->query('SELECT 1;');
} catch (\Exception $e) {
    echo sprintf('Caught %s exception: %s', get_class($e), $e->getMessage()) . PHP_EOL;
}

触发警告:

PHP Warning:  PDO::query(): MySQL server has gone away in pdo.php on line 13
PHP Warning:  PDO::query(): Error reading result set's header in pdo.php on line 13
Caught PDOException exception: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

重要的:问题不在于 MySQL 服务器消失的问题,而在于 PDO 错误处理。

UPDATE:在所有三种模式下触发警告:ERRMODE_SILENT、ERRMODE_WARNING、ERRMODE_EXCEPTION

PHP 7.2.1 (cli) (built: Jan  5 2018 17:34:14) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies

我敢说这是一个错误。我找到了两张相关的票:

  • 错误#63812:无论错误处理策略如何,PDO 都会触发警告,于 2012 年针对 PHP/5.3.19 提交
  • 错误#74401:PDO 触发警告已设置抛出异常,于 2017 年针对 PHP/7.0.17 提交

无论如何,它们仍然是开放的,并且不完全清楚它们是否是有效的问题(尽管我怀疑它们是)。这似乎不是一个设计决策,因为其他 MySQL 错误不会同时触发警告和异常:

$connection = new PDO('mysql:host=127.0.0.1;dbname=test', 'test', 'test',
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
$connection->query('SELECT * FROM foo');

警告:PDO::query():SQLSTATE[42S02]:未找到基表或视图:1146 表“test.foo”不存在

$connection = new PDO('mysql:host=127.0.0.1;dbname=test', 'test', 'test',
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$connection->query('SELECT * FROM foo');

致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42S02]:未找到基表或视图:1146 表“test.foo”不存在”

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

PDO::ERRMODE_EXCEPTION 不会抑制警告 的相关文章

  • 我如何知道请求是否来自 flash swf?

    我有一个用 flash 开发的应用程序 我需要访问一些 php 文件 因此 如果访问来自 swf 则 php 文件会返回一些数据 如何判断请求是否来自Flash 无需将 get post 变量传递给 php 可能是用户代理 推荐人 请记住
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 基本表创建 fpdf

    我找不到使用 fpdf 制作表格并从 mysql 数据库获取数据的合适教程 我只是想知道如何创建一个 我在网上尝试示例时遇到了很多错误 例如 我有 名字 中间名 姓氏 年龄 和 电子邮件 列 如何使用 fpdf 创建表格并回显数据库中的条目
  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • PHP 如果不存在,则从字符串中删除 ','

    我正在运行这段代码 stmt pdo conn gt prepare SELECT from admin where support emails support emails and logged logged and disabled
  • CSS 无法与 CodeIgniter 一起使用

    这是我的 CI 代码的一部分 class page extends CI Controller var Page public function construct parent construct this gt Page 1 this
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • Node.js 进行 rsa 加密的正确方法?

    我正在尝试创建一个 WS 来发出肥皂请求 在消息正文中有一个包含加密文本的字段 我有公钥来加密文本 但我获得的唯一结果是文本无法识别 我使用节点的加密模块来发出请求 并且文本已加密 但我不知道为什么没有正确加密 PS我用 openssl p
  • PHP/MySQL:如何在网站中创建评论部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不会问 如何使用 PHP MySQ
  • 如何在无法重启的服务器(Apache)上使用gettext?

    我在服务器故障上问了这个问题 https serverfault com questions 104224 how do you use gettext on server apache you cant restart但我没有得到任何回应
  • 如何在 join 语句中进行计数

    我有桌子post int post id varchar title text content和表comment int comment id int post id varchar content其中 post id 是外键引用表帖子 如
  • Twig:选择某些块并渲染它们

    我正在将 twig 模板引擎集成到 PHP 应用程序中 特别是 我想使用 twig 引擎来渲染表单 了解了 symfony2 如何使用 twig 渲染表单小部件后 他们有一个巨大的模板文件 其中包含所有小部件 如下所示 block pass
  • 如何在Sequelize中从主模型同一级别的包含模型返回结果?

    这是我在项目中完成的代码和结果 我想获得包含模型的结果与主模型相同的结果 下面的代码是我所做的 序列化查询 User findAll include model Position attributes POSITION NAME then
  • 如何将 yii2 Restful api 中两个表的关系数据显示为 json 格式

    我遇到了将两个表中的数据显示为 JSON 格式并在 yii2 Restful api 上工作的问题 这是我的结构数据库 TABLE volunteer volunteer id int 11 NOT NULL auto increment
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015

随机推荐

  • 打印可滚动的 Windows 窗体。 [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中截取 Winforms 控件 表单的屏幕截图 我有一个带有名称和图片列表的 Windows 窗体 该列表很长 因此有一个滚动面板 现在 我想打印此表单 但不能 因为打印功能仅打印 可见
  • 为什么在 ScrollViewer 内部单击时我的 TextBox 会获得焦点?

    在我的 Windows 应用商店应用程序中 我创建了一个 ScrollViewer 里面有一个网格 里面有一些文本框 每当用户单击 ScrollViewer 中的任意位置时 第一个 TextBox 就会获得焦点 我不知道为什么会发生这种情况
  • 使用 TensorFlow 对图像中的点进行插值采样

    给定的是灰度图像I作为 2D 张量 维度 W H 和坐标张量C 暗淡 无 2 我想解释的行C作为坐标I 样本I在这些坐标上使用某种插值 双线性可能适合我的用例 并将结果值存储在新的张量中P 维度为无 即一维 条目数量为C有行 使用 Tens
  • Python 字典的底层哈希数据结构

    我正在构建一个非常大的字典 并且正在执行许多检查以查看键是否在结构中 然后添加它是否唯一或如果相同则增加计数器 Python 使用一个哈希数据结构存储字典 不要与加密哈希函数混淆 查找的时间复杂度为 O 1 但如果哈希表已满 则必须重新哈希
  • 如何在 Angular js 智能表中编辑内容

    我对java脚本很陌生 所以如果这看起来很基础 我必须道歉 如何使用 Angularjs 编辑 Smart Table 中的行表 似乎没有关于新智能表的教程 我想创建一个简单的表单 供用户输入特定地点的开放时间 我创建了可以在表上添加和删除
  • 线程“main”中出现异常 java.lang.UnsatisfiedLinkError:java.library.path 中没有 lwjgl

    我正在构建基本的 Slick 游戏示例 解释如下 http slick cokeandcode com wiki doku php id 01 a basic slick game 我遇到了一些问题 具体来说 游戏编译得很好 但当我尝试运行
  • 获取从本机 dll 到 C# 应用程序的结构数组

    我有一个 C NET 2 0 CF 项目 需要在本机 C DLL 中调用方法 此本机方法返回类型的数组TableEntry 当调用本机方法时 我不知道数组有多大 如何将表从本机 DLL 获取到 C 项目 下面是我现在所拥有的 in C NE
  • 找到用死 Groovy 代码填充 PermGen 的代码

    We have had our glassfish instance go down every two weeks for a while with a java lang OutOfMemoryError PermGen space I
  • Pyparsing - 令牌的顺序不可预测

    我希望能够从一段文本中提取字母的类型和数量 其中字母可以按任何顺序排列 我正在进行其他一些解析 但这一点让我难住了 input gt result abc gt a 1 b 1 c 1 bbbc gt b 3 c 1 cccaa gt a
  • 绕过 vba 函数中的最大字符串大小?

    vba 函数的字符串中可以使用的最大字符数为 255 我正在尝试运行这个函数 Var1 1 Var2 2 Var256 256 RunMacros Tims pet Robot Var1 Var2 Var256 Runat TimeValu
  • ASP.NET HttpApplication 生命周期

    Global asax cs 扩展的 HttpApplication 类是否在应用程序的生命周期中存在 什么时候可以创建 销毁实例 我遇到 application start 触发两次 这似乎与应用程序池回收和在此过程中发出请求有关 我还没
  • 如何使用 PHP 从日期中查找星期几的日期?

    如果我有一个 date YYYY mm dd并想要得到一个具体的 day 由 0 周日 至 6 周六 指定 YYYY mm dd is in 例如 如果我得到2012 10 11 as date and 5 as day 我想得到2012
  • 在纯 Perl 中从另一个 HTTP 资源进行流传输的最简单方法是什么?

    在 Perl 中从另一个 HTTP 资源进行流式传输的最简单方法 无需打开 shell 进行卷曲并从标准输入读取 是什么 我在这里假设我正在读取的 HTTP 资源是一个潜在的无限流 或者只是非常非常长 好的旧 LWP 允许您将结果作为流进行
  • graphviz - 固定节点位置

    我有一个由 neato 处理的图表 我正在向它添加新的边 但是 我不希望旧节点被移动 我希望 neato 计算新节点的新位置 并将旧节点保留在同一位置 strict graph node0 pos 1 2 node1 pos 2 3 我添加
  • 将方法参数传递给函数

    我很好奇这在 Go 中是否可行 我有一个具有多种方法的类型 是否可以有一个函数接受方法参数 然后为类型调用它 这是我想要的一个小例子 package main import fmt type Foo int func f Foo A fmt
  • Guice 和 Scala - 泛型依赖注入

    我正在尝试使用 Guice 创建通用特征的绑定 看看如何trait被定义为 trait Repository T See the trait执行 class DomainRepository extends Repository Domai
  • ES6 - 使用 getter 导出模块

    想要导出一个模块 该模块从某个全局对象中获取模块的定义 它是这样的 export get DynamicModule return globalFluxStorage state property property property pro
  • 如何在pytest中测试类的继承方法

    house py class House def is habitable self return True def is on the ground self return True conftest py import pytest f
  • 通过地址/指针访问对象

    我可以通过内存地址或指针访问当前 R 会话中创建的 data table 对象吗 library data table DT lt data table a 1 10 b letters 1 10 address DT 1 0x6bf9b9
  • PDO::ERRMODE_EXCEPTION 不会抑制警告

    http php net manual en pdo error handling php PDO ERRMODE WARNING 除了设置错误代码之外 PDO 还会发出传统的 E WARNING 消息 如果您只想在不中断应用程序流程的情况