Maison  >  Article  >  développement back-end  >  Comment gérer les erreurs dans PDO pour l’apprentissage des bases de données PHP ?

Comment gérer les erreurs dans PDO pour l’apprentissage des bases de données PHP ?

WBOY
WBOYoriginal
2021-10-28 16:54:022144parcourir

Dans l'article précédent, je vous ai présenté "Comment utiliser PDO pour obtenir des résultats de requête dans l'apprentissage de bases de données PHP ?" 》, qui présente en détail les connaissances sur la façon d'utiliser PDO pour obtenir des résultats de requête. Dans cet article, voyons comment gérer les erreurs PDO en PHP. J'espère que cela sera utile à tout le monde !

Comment gérer les erreurs dans PDO pour l’apprentissage des bases de données PHP ?

Dans l'étude précédente, nous avons appris à obtenir des résultats de requête via PDO. Ensuite, nous devons en apprendre davantage sur la gestion des erreurs PDO. Dans PDO, il existe deux méthodes pour obtenir des informations sur les erreurs dans le programme, à savoir . méthode errorCode() et méthode errorInfo(). Examinons ensuite les applications de ces deux méthodes. 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()

Avant de comprendre comment les méthodes errorCode() et errorInfo() gèrent les erreurs, jetons d'abord un coup d'œil au mode de gestion des erreurs dans PDO. 🎜🎜Mode de gestion des erreurs de PDO🎜🎜🎜Il existe trois modes de gestion des erreurs différents fournis dans PDO. Ce ne sont pas seulement des styles différents. La programmation peut être prise en charge et la façon dont l'extension gère les erreurs peut également être ajustée. Ensuite, je vais vous présenter ces trois méthodes différentes de gestion des erreurs. 🎜
  • 🎜<span style="font-size: 16px;"><strong>PDO::ERRMODE_SILENT</strong></span><span style="font-size: 16px;"><strong> </strong></span>🎜
🎜PDO::ERRMODE_SILENT Il représente le mode par défaut. Dans ce cas, lorsqu'une erreur se produit, PDO définira simplement le code d'erreur et n'effectuera aucune autre opération. Vous pouvez également utiliser PDO::errorCode() et PDO::errorInfo() sont deux méthodes pour vérifier les instructions et vérifier les objets de base de données. 🎜🎜🎜Ce que nous devons noter, c'est que si l'erreur se produit à cause de l'objet d'instruction appelant, alors la méthode PDOStatement::errorCode() ou PDOStatement::errorInfo() de cet objet peut être appelée. Si l'erreur se produit en raison de l'appel d'un objet de base de données, vous pouvez appeler les méthodes PDOStatement::errorCode() ou PDOStatement::errorInfo() sur l'objet de base de données. 🎜🎜<ul style="list-style-type: disc;"><li>🎜<code><span style="font-size: 16px;"><strong>PDO::ERRMODE_WARNING </strong> span><span style="font-size: 16px;"></span></span>🎜🎜PDO::ERRMODE_WARNING Le mode peut définir des codes d'erreur, bien sûr, il ne définira pas seulement erreurs En plus du code, PDO enverra également un message, qui est un message E_WARNING très traditionnel. Lorsque nous devons déboguer ou tester, nous ne voulons pas interrompre le programme, mais nous voulons comprendre ce qui n'a pas fonctionné. PDO::ERRMODE_WARNING Il est temps que ce mode entre en jeu🎜🎜
  • 🎜<span style="font-size: 16px;"> <strong>PDO::ERRMODE_EXCEPTION </strong></span>🎜
🎜Le mode PDO::ERRMODE_EXCEPTION peut également définir des codes d'erreur à première vue, en plus de définir des codes d'erreur. , PDO Vous pouvez également lancer une classe d'exception PDOException et définir ses propriétés pour refléter les codes d'erreur et les messages d'erreur. Le mode PDO::ERRMODE_EXCEPTION est également très utile lors du débogage. Il peut signaler très rapidement les zones problématiques potentielles dans le code, car il amplifie efficacement le point du script où l'erreur se produit. 🎜🎜🎜PDO utilise SQL-92 SQLSTATE pour standardiser les chaînes de codes d'erreur, et différents pilotes PDO sont responsables du mappage de leurs codes natifs aux codes SQLSTATE appropriés. La méthode PDO::errorCode() renvoie un seul code SQLSTATE. 🎜🎜Si vous avez besoin d'informations plus détaillées sur cette erreur, PDO fournit également une méthode PDO::errorInfo() pour renvoyer un code SQLSTATE, un code d'erreur de pilote spécifique et la chaîne d'erreur de ce tableau de pilotes. . 🎜🎜Un autre effet très utile du mode exception est que vous pouvez créer votre propre gestion des erreurs plus clairement que les avertissements traditionnels de style PHP, et par rapport au mode silencieux et en vérifiant explicitement la valeur de retour de chaque appel de base de données, mode exception Moins de code/imbrication requis . 🎜🎜Ensuite, examinons la création d'une instance PDO et la définition du mode d'erreur à travers un exemple. L'exemple est le suivant : 🎜
<?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();
    }
?>
🎜Dans l'exemple ci-dessus, le mode d'erreur est défini via la méthode PDO::setAttribute() En plus de définir le mode d'erreur de cette manière, le mode d'erreur. peut également être défini lors de la création d'une instance PDO🎜 🎜🎜L'exemple est le suivant : 🎜
<?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();
    }
?>
🎜Voici les trois modes de gestion des erreurs de PDO. Ensuite, jetons un coup d'œil à la méthode PDO::errorCode(). 🎜🎜<strong><span style="font-size: 20px;">PDO::errorCode()</span></strong>Méthode🎜🎜PDO::errorCode() La méthode est principalement utilisée pour obtenir les codes d'erreur qui se produisent lors de l'utilisation des handles de base de données. Ces codes d'erreur sont appelés Code 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();
    }
?>

输出结果:

Comment gérer les erreurs dans PDO pour l’apprentissage des bases de données PHP ?

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

<strong><span style="font-size: 20px;">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();
    }
?>

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

Comment gérer les erreurs dans PDO pour l’apprentissage des bases de données PHP ?

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Que signifie .= en php ?Article suivant:Que signifie .= en php ?