广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >原生php pdo几个处理
  • 557
分享到

原生php pdo几个处理

原生phppdo几个处理 2019-09-01 00:09:01 557人浏览 才女
摘要

闲来无事,便记录几个最近遇到的Pdo细节问题,平常都是用ORM的。 长连接 在历史的Mysql驱动中,都是使用connect和pconnect来区分长短连接,到了pdo之后,改成了参数。 PDO::ATTR_PERSISTENT $dbh

闲来无事,便记录几个最近遇到的Pdo细节问题,平常都是用ORM的。

长连接

在历史的Mysql驱动中,都是使用connect和pconnect来区分长短连接,到了pdo之后,改成了参数。

PDO::ATTR_PERSISTENT

 $dbh = new PDO(MYSQL_DSN, MYSQL_USER, MYSQL_PASS, array(
            PDO::ATTR_PERSISTENT => true,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        ));

如果想使用持久连接,必须在传递给 PDO 构造函数的驱动选项数组中设置 PDO::ATTR_PERSISTENT 。如果是在对象初始化之后用 PDO::setAttribute() 设置此属性,则驱动程序将不会使用持久连接。

MySQL Server has Gone away

某个mysql长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。此后再通过这个connection发起查询的时候,就会报错server has gone away,这种情况特别容易出现在脚本里。(max_allowed_packet 是包太大造成的连接中断,这里不予以讨论)

解决方案:

  1. 修改my.cnf的 wait_timeout、interactive_timeout

  2. 在连接里初始化后执行sql,sql = "set interactive_timeout=秒数";

明明是长连接,但是为什么会产生是去连接呢?

错误与错误处理

PDO 提供了三种不同的错误处理模式,以满足不同风格的应用开发

  1. PDO::ERRMODE_SILENT
  2. PDO::ERRMODE_WARNING
  3. PDO::ERRMODE_EXCEPTION

PDO::ERRMODE_SILENT

此为默认模式。

PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象。

如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。

如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方法。

PDO::ERRMODE_WARNING

除设置错误码之外,PDO 还将发出一条传统的 E_WARNING 信息,所以一般用于调试。

PDO::ERRMODE_EXCEPTION

除设置错误码之外,PDO 还将抛出一个 PDOException 异常类并设置它的属性来反射错误码和错误信息。

异常模式另一个非常有用的是,相比传统 PHP 风格的警告,可以更清晰地构建自己的错误处理,而且比起静默模式和显式地检查每种数据库调用的返回值,异常模式需要的代码/嵌套更少。

demo(异常模式):

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

默认模式:

 try {
                $pdo = Mysql::getInstance();
                $pdo = $pdo->getPdo();

                $sql = sprintf("insert into  ".$this->getTableName()." (`job_number`, `point_data`, `sign_time`) 
                            values("%s","%s","%s")",
                    $this->jobNum, $this->__toString(), date("Y-m-d H:i:s"), date("Y-m-d H:i:s", $this->verifyTimeMillis/1000));
                $sth = $pdo->prepare($sql);
                if ($sth) {
                    if ($sth->execute()) {
                        $this->id = $pdo->lastInsertId();
                        $success = true;
                        break;
                    }
                    $code = $sth->errorCode();
                    if($code == "23000") {
                        $success = true;
                        //["23000",1062,"Duplicate entry "1698-2019-11-26 13:43:57" for key "job_number_time_unique""]
                        if($this->id == 0) {
                            $this->checkExists();
                        }
                        break;
                    }
                     if($code == "HY000") {
                            Mysql::getInstance()->reConnection();
                           continue;
                     }

                     if(!empty($code)) {
                             Logs::writeErrorLog("数据操作失败 db error code:". $code."message:".json_encode($info));
                             continue;
                     }

                    if($code == "42S02") {
                        $this->autoCreateTable();
                    }

                } else {
                    throw new Exception("insert db error with content:" . $this->__toString());
                }
            } catch (Exception $exception) {
                $e = $exception;
            }

--结束END--

本文标题: 原生php pdo几个处理

本文链接: https://www.lsjlt.com/news/2644.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 原生php pdo几个处理
    闲来无事,便记录几个最近遇到的Pdo细节问题,平常都是用orm的。 长连接 在历史的Mysql驱动中,都是使用connect和pconnect来区分长短连接,到了pdo之后,改成了参数。 PDO::ATTR_PERSISTENT $dbh...
    99+
    2019-09-01
    原生php pdo几个处理
  • PHP PDO 事务处理 预处理 高洛峰 细说PHP
    PDO错误处理三种模式         //mysql_connect('localhost','root','root')...
    99+
    2022-10-18
  • php pdo 错误处理怎么设置
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php PDO异常处理详解异常处理:PHP:默认为直接报错MYSQL:默认为静默模式,错就错,不报错PDO:默认为静默模式,错就错,不报错以前,当PHP碰到错误的时候...
    99+
    2022-10-19
  • php pdo错误处理如何设置
    本文小编为大家详细介绍“php pdo错误处理如何设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“php pdo错误处理如何设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php pdo错误处理设置方法:1...
    99+
    2023-07-04
  • PHP中PDO如何进行错误处理
    这篇文章给大家分享的是有关PHP中PDO如何进行错误处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在之前的学习中我们已经学会出来了通过PDO获取查询结果,那接下来就要学习一下PDO的错误处理, 在 PDO 中...
    99+
    2023-06-25
  • php中PDO有哪些预处理语句
    今天就跟大家聊聊有关php中PDO有哪些预处理语句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的...
    99+
    2023-06-14
  • php PDO的预处理语句是什么
    本篇内容主要讲解“php PDO的预处理语句是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php PDO的预处理语句是什么”吧!1、位置参数利用bindParam()函数,而非直接提供值。...
    99+
    2023-06-30
  • AS400处理数据高效率的几个原因分别是什么
    本篇文章为大家展示了AS400处理数据高效率的几个原因分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。AS400传统写法比开放平台数据库执行SQL效率高的几...
    99+
    2022-10-19
  • PHP PDO预处理语句及事务的使用
    目录预处理语句功能事务能力总结预处理语句功能 预处理语句就是准备好一个要执行的语句,然后返回一个 PDOStatement 对象。一般我们会使用 PDOStatement 对象的 ...
    99+
    2022-11-12
  • 你可能不知道的几个JavaScript原生方法是怎样的
    这篇文章将为大家详细讲解有关你可能不知道的几个JavaScript原生方法是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自ES6发行以来,许多新的,...
    99+
    2022-10-19
  • SQL2008遇到的几个小问题处理办法
    ---------------------sql server 2008 评估过期解决办法----------------------------------------HKEY_LOCAL_MACHINE...
    99+
    2022-10-18
  • 图文详解matlab原始处理图像几何变换
    目录(一)图像几何变换理论知识(1)图像的平移与比例(2)关于旋转变换(3)关于对称变换(4)复合变换(二)matlab编程实现变换(1)对图像的理解(2)比例变换(3)对称变换总结...
    99+
    2022-11-12
  • Python中对字典的几个处理方法分享
    目录字典求和列表剔重并计数获取字典中最大的value获取字典中出现value最大的key字典对应元素追加字典对应元素追加并剃重对字典进行过滤反转字典的方法(字典的key和value对...
    99+
    2022-11-11
  • 如何使用原生ajax处理json字符串
    这篇文章将为大家详细讲解有关如何使用原生ajax处理json字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。AJAXAJAX = Asynchronous JavaS...
    99+
    2022-10-19
  • winxp系统下内存不足的几个处理手法
    一、剪贴板占用了太多的内存实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板...
    99+
    2023-05-23
    处理 手法 不足 内存 系统 程序
  • Java中异常的产生原因及如何处理
    本篇内容主要讲解“Java中异常的产生原因及如何处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中异常的产生原因及如何处理”吧!Java中的异常(Exception)又称为例外,是一个...
    99+
    2023-06-30
  • PHP生成HTML前提条件及原理是什么
    PHP生成HTML前提条件及原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。很多网站都开始使用PHP作为网站开发的基础语言,因为它强大的功能深深吸引了程序员的目光。下面...
    99+
    2023-06-17
  • SpringBoot2异常处理与web原生组件注入的方法
    这篇文章主要介绍“SpringBoot2异常处理与web原生组件注入的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot2异常处理与web原生组件注入的方法”文章能帮助大家解决问...
    99+
    2023-06-29
  • 遇到一个php错误如何处理
    这篇文章主要为大家展示了“遇到一个php错误如何处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“遇到一个php错误如何处理”这篇文章吧。遇到一个php错误的解决办法:1、检查语法格式;2、查看...
    99+
    2023-06-25
  • 如何用Java 几分钟处理完 30 亿个数据(项目难题)
    目录1. 场景说明2. 模拟数据3. 场景分析4. 读取数据5. 处理数据5.1 思路一完整代码测试结果5.2 思路二:分治法初始化阻塞队列生产者消费者1) 队列线程私有化2) 多子...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作