登录  /  注册

PHP数据库学习之PDO怎样进行错误处理?

WBOY
发布: 2021-10-28 16:54:02
原创
1910人浏览过

在之前的文章中给大家带来了《php数据库学习之怎样使用pdo获取查询结果?》,其中详细的介绍了怎样使用pdo获取查询结果的相关知识,本篇我们一起来看一下php中怎样进行pdo的错误处理,希望对大家有帮助!

PHP数据库学习之PDO怎样进行错误处理?

在之前的学习中我们已经学会出来了通过PDO获取查询结果,那接下来就要学习一下PDO的错误处理, 在 PDO 中有两个获取程序中错误信息的方法,分别是 errorCode() 方法和 errorInfo() 方法。接下来我们就一起来看一看这两种方法的应用吧。

在了解errorCode() 方法和 errorInfo() 方法是怎样进行错误处理的方法之前,我们先来看一下PDO中的错误处理模式。

PDO的错误处理模式

在PDO 中一共提供了三种不同的错误处理模式,它们不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式。那接下来就给大家介绍一下这三种不同的错误处理方式。

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_SILENT</strong></span><span style="font-size: 16px;"><strong> </strong></span>

PDO::ERRMODE_SILENT 表示的为默认模式,在这种情况下发生错误的时候 ,PDO会简单的设置一下错误码,不会做其他的任何操作,同时也可以使用PDO::errorCode() PDO::errorInfo() 这两个方法来检查语句和检查数据库对象。

我们需要注意的是,如果错误出现的原因是因为调用语句对象,那么可以调用这个对象的PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果错误出现的原因是因为调用数据库对象而产生的,那么可以在数据库对象上调用PDOStatement::errorCode() 或 PDOStatement::errorInfo() 这两种方法。

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_WARNING </strong></span><span style="font-size: 16px;"></span>

PDO::ERRMODE_WARNING 模式可以设置错误代码,当然了它除了会设置错误码之外,PDO还会发出一条信息,这条信息是很传统的E_WARNING 信息。在我们需要调试或者测试的时候,不想中断程序但是想弄清楚发生了什么问题的时候。PDO::ERRMODE_WARNING 这个模式就到了发挥作用的时候了

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_EXCEPTION </strong></span>

PDO::ERRMODE_EXCEPTION 模式也可以设置错误码,初看能够设置错误码之外,PDO还能够抛出一个 PDOException 异常类并设置它的属性来反射错误码和错误信息。PDO::ERRMODE_EXCEPTION 模式在调试的时候也是非常有用的,它可以非常快速地指出代码中有问题的潜在区域,因为它会有效地放大脚本中产生错误的点。

PDO 使用 SQL-92 SQLSTATE 来规范错误码字符串,不同 PDO 驱动程序负责将它们的本地代码映射为适当的 SQLSTATE 代码。PDO::errorCode() 方法返回一个单独的 SQLSTATE 码。

如果需要更多这个错误的细节信息,PDO 还提供了一个 PDO::errorInfo() 方法来返回一个包含 SQLSTATE 码、特定驱动错误码以及此驱动的错误字符串的数组。

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

接下来我们通过示例来看一下创建 PDO 实例,并设置错误模式。示例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>
登录后复制

上述示例中便是通过PDO::setAttribute() 方法设置错误模式,除了这种方法设置错误模式外,还可以在创建PDO 实例时设置错误模式

示例如下:

$pdo = new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
登录后复制

以上便是便是PDO的三种错误处理模式,接下来我们看一下PDO::errorCode() 方法。

<strong><span style="font-size: 20px;">PDO::errorCode()</span></strong> 方法

PDO::errorCode() 方法大多是用在获取在操作数据库句柄时所发生的错误代码,这些错误代码被称为SQLSTATE 代码。

PDO::errorCode() 方法可以返回一个 SQLSTATE,一个由 5 个字母或数字组成的在 ANSI SQL 标准中定义的标识符。 简单可以理解成,一个 SQLSTATE 由前面两个字符的类值和后面三个字符的子类值组成。

接下来我们通过示例来看一下通过 PDO 连接数据库,并通过 errorCode() 方法获取错误代码。

示例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        $sql = &#39;select * from user&#39;;
        $res = $pdo -> query($sql);
        echo &#39;errorCode 为:&#39;.$pdo -> errorCode().&#39;<br>&#39;;
        foreach ($res as $key => $value) {
            echo &#39;序号:&#39;.$value[&#39;id&#39;].&#39;; 姓名:&#39;.$value[&#39;name&#39;].&#39;; 年龄:&#39;.$value[&#39;age&#39;].&#39;; 性别:&#39;.$value[&#39;sex&#39;].&#39;<br>&#39;;
        }
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>
登录后复制

输出结果:

1028.14.png

上述结果便是通过 errorCode() 方法获取错误代码。接下来我们看一下最后一种方法PDO::errorInfo() 方法。

<strong><span style="max-width:90%">PDO::errorInfo() </span></strong>方法

PDO::errorInfo() 方法与PDO::errorCode() 方法一样都是用于获取操作数据库句柄时所发生的错误信息。

不同的是errorInfo() 方法的返回值为一个数组,它包含了相关的错误信息。

接下来我们通过示例来看一下使用 PDO 中的 query 方法完成数据查询操作,并通过 errorInfo() 方法获取错误信息。

示例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        // $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = &#39;select * from userr&#39;;
        $res = $pdo -> query($sql);
        echo &#39;errorInfo 为:<br>&#39;;
        print_r($pdo -> errorInfo());
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>
登录后复制

上述示例中,我们查询了一个不存在的数据库,输出结果:

1028.15.png

其中我们需要注意的是:PDO 和 PDOStatement 对象中都有 errorCode() 和 errorInfo() 方法,如果没有任何错误,errorCode() 返回的是 00000;否则就会返回一些错误代码。而 errorInfo() 返回的是一个数组,包括 PHP 定义的错误代码和 MySQL 的错误代码及错误信息。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

以上就是PHP数据库学习之PDO怎样进行错误处理?的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号