PDO 全称 PHP Data Object

​------------------    错误处理  -------------------------

​​php 的 mysql 扩展对于 mysql 执行中的错误,并不报错显示在页面上。默认是“静默模式”。如果要显示错误到页面上,需要使用函数 mysql_error()

if( !mysql_query("select * from ") ){

echo mysql_error();

}

PDO 类对错误的处理默认也是“静默模式”。​要输出错误信息,也需要手动输出。

$pdo->errorCode() //获得错误的编码

$pdo->errorInfo() //错误信息集合​,包含三个元素的索引数组

PDO 支持三种错误处理模式:

静默模式,警告模式,异常模式

静默模式是默认的,需要修改的话,通过设置 PDO 对象的属性完成。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)​

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)​​

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)​​

警告模式:

警告模式也不是什么特别的东西哦,错误发生时会报一个警告,就只是一个警告,默认情况下,php对警告的处理是输出页面,可以自己定义处理函数。

异常模式:

​异常处理分成三步:抛出异常,监听异常,捕获异常。

​​其实异常就是错误。抛出的错误就是异常。错误处理是:触发,处理。这里的的触发就是异常处理的“抛出”。

抛出:throw

监听:try

捕获:catch​

​异常的工作原理是这样的,把一些信息放到一个类的对象里面,这就是异常处理的原理。这个类叫异常类。这些信息叫异常信息。这没有什么特别的。这个异常类是 Exception .

一般的异常处理:

​try{

$age = 28;​

if( $age > 26 ){

throw new Exception("年龄过大");

}

}catch( Exception $e ){

echo $e->getMessage();

}

throw 会抛出一个异常对象,这个对象是异常类的对象,所以写为 new Exception 。​

try 会监听写在它里面的异常。​catch 会捕获它的参数对应的异常。这里 catch 的参数是 Exception $e ,这种写法表示这个参数是一个对象,而且只能是 Exception 类的对象。这是 php 语法里面对参数的限制。这个异常类可以是 Exception 或者 它的子类。如果是它的子类,那么 throw new 的类也应该是 ​Exception 类的子类(我是这么想的,未测试)。

PDO 的异常处理:​​

​​try{

$pdo->query("set names "); //不需要抛出异常,可能是在query函数中抛出的

echo '错误了'; //这句不会输出​,抛出异常后程序挂起,必须处理异常,处理异常后这句也不执行。

}catch( PDOException $e ){  //PDOException类是 Exception类的子类的子类

echo $e->getMessage();

}

其实,异常处理就是用面向对象的语法来处理错误。用一般的面向过程的方法也是可以,只是面向对象的语法比较高级。所以,错误处理方式分成两种:标准错误处理,异常错误处理。

PDO 的错误处理的更多相关文章

  1. PHP PDO的错误处理模式

    PDO默认的错误处理方式是返回一个数组格式的错误代码.如果想要判断SQL有没有出错时,就需要写一组代码来检测这个返回的数组.觉得这样有些麻烦.还好PDO还提供了另外两种处理方式,只要根据需要设置一下就 ...

  2. pdo mysql错误:Cannot execute queries while other unbuffered queries are active

    运行环境:PHP 5.5.30-x64,MYSQL  5.6.27 错误代码:Cannot execute queries while other unbuffered queries are act ...

  3. 跟着百度学PHP[14]-PDO的错误处理模式&PDO执行SQL

    我们在使用PDO去执行sql语句的时候并不会报错.如下案例所示: <?php try { //$pdo = new pdo("mysql:host=主机;port=端口;dbname= ...

  4. 学习PDO中的错误与错误处理模式

    在 PDO 的学习过程中,我们经常会在使用事务的时候加上 try...catch 来进行事务的回滚操作,但是大家有没有注意到默认情况下 PDO 是如何处理错误语句导致的数据库操作失败问题呢?今天,我们 ...

  5. 前端学PHP之PDO基础操作

    × 目录 [1]创建PDO [2]使用PDO [3]事务处理 前面的话 PDO(php data object)扩展类库为php访问数据库定义了轻量级的.一致性的接口,它提供了一个数据库访问抽象层,这 ...

  6. php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]

    php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库.PDO教程] 第14章 数据库252.[2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库[已发布,点击下载]253. ...

  7. PDO预处理

    方法:bool PDOStatement::execute ([ array $input_parameters ] ) 1.PDOStatement::execute不使用参数 01)单个绑定值(P ...

  8. PHP5中PDO的简单使用

    PHP5中PDO的简单使用 标签: php数据库mysql扩展extensionexception 2012-05-06 10:27 27753人阅读 评论(0) 收藏 举报  分类: PHP(6)  ...

  9. php错误以及常用笔记

    //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变量名建 ...

随机推荐

  1. EF6中一个关于时间类型 datetime2 的坑

    在一个访问下位机的程序中,返回的时间戳有时候因断线产生0001年01月01日的时间,而原先使用拼接SQL进行数据存储的操作时,这个问题是可以跳过的. 这次把拼接SQL的部分重新改为EF进行管理,这个坑 ...

  2. bp文件错误消除

    代码文件报错, error: unused parameter 'data' [-Werror,-Wunused-parameter]‘ 按提示在cflags中加入: "-Wunused-p ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_8_LinkedHashMap集合

    linked

  4. 用python进行月份加减的函数

    import math def add_month(datamonth, num): """ 月份加减函数,返回字符串类型 :param datamonth: 时间(20 ...

  5. dcef3 为按钮添加单击事件

    http://ju.outofmemory.cn/entry/78083 dcef3 为按钮添加单击事件 BccSafe's Blog 2014-06-01 3706 阅读 DOM 演示dcef3操作 ...

  6. oracle 11g 数据库恢复技术 ---03 补充日志

    三 补充日志(supplemental logging) 补充日志是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量.Oracle某些功能要求启用补充日志才能正常或更好的工作,比如logmi ...

  7. netcore2.1 在后台运行一个任务

    在 ASP.NET Core 2.1中, 提供了一个名为BackgroundService的类,在 Microsoft.Extensions.Hosting命名空间中,其代码为 namespace M ...

  8. Python笔记(二十二)_魔法方法_基本魔法方法

    __init__(self[,...]) __init__和__new__组成python的构造器,但__init__更多的是负责初始化操作,相当于一个项目中的配置文件,__new__才是真正的构造函 ...

  9. Consul集群Server+Client模式

    Consul集群Server+Client模式 架构示意图 只使用Consul的Server模式有以下2个问题: 因为Consul Server数量受到控制所以压力承载(扩展性)是个问题. Serve ...

  10. [常用类]Math、Random、System、BigInteger、BigDecimal

    Math类中的成员全是静态成员,构造方法是 私有的,以避免被创建对象 常用方法: int abs() double ceil() //向上取整 double floor() //向下取整 int ma ...