Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?

Wie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?

WBOY
WBOYOriginal
2021-10-28 16:54:022143Durchsuche

Im vorherigen Artikel habe ich Ihnen „Wie verwende ich PDO, um Abfrageergebnisse beim Lernen von PHP-Datenbanken zu erhalten?“ vorgestellt. 》, in dem die relevanten Kenntnisse zur Verwendung von PDO zum Erhalten von Abfrageergebnissen ausführlich vorgestellt werden. In diesem Artikel werden wir uns mit der Behandlung von PDO-Fehlern in PHP befassen. Ich hoffe, dass dies für alle hilfreich ist.

Wie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?

In der vorherigen Studie haben wir gelernt, Abfrageergebnisse über PDO zu erhalten. Als nächstes müssen wir etwas über die Fehlerbehandlung in PDO lernen, nämlich errorCode()-Methode und errorInfo()-Methode. Schauen wir uns als Nächstes die Anwendungen dieser beiden Methoden an. 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()

Bevor wir verstehen, wie die Methoden errorCode() und errorInfo() Fehler behandeln, werfen wir zunächst einen Blick auf den Fehlerbehandlungsmodus in PDO. 🎜🎜PDOs Fehlerbehandlungsmodus🎜🎜🎜In PDO stehen drei verschiedene Fehlerbehandlungsmodi zur Verfügung. Dabei handelt es sich nicht nur um unterschiedliche Stile Dabei kann auf Programmierfehler eingegangen werden und auch die Art und Weise, wie die Erweiterung mit Fehlern umgeht, kann angepasst werden. Anschließend stelle ich Ihnen diese drei verschiedenen Fehlerbehandlungsmethoden vor. 🎜
  • 🎜<span style="font-size: 16px;"><strong>PDO::ERRMODE_SILENT</strong></span><span style="font-size: 16px;"><strong> </strong></span>🎜
🎜PDO::ERRMODE_SILENT Dies stellt den Standardmodus dar. Wenn ein Fehler auftritt, setzt PDO einfach den Fehlercode und führt keine anderen Operationen aus. Sie können auch PDO::errorCode() verwenden >PDO::errorInfo() sind zwei Methoden zum Überprüfen von Anweisungen und zum Überprüfen von Datenbankobjekten. 🎜🎜🎜Was wir beachten müssen, ist, dass, wenn der Fehler aufgrund des aufrufenden Anweisungsobjekts auftritt, die Methode PDOStatement::errorCode() oder PDOStatement::errorInfo() dieses Objekts aufgerufen werden kann. Wenn der Fehler durch den Aufruf eines Datenbankobjekts auftritt, können Sie die Methoden PDOStatement::errorCode() oder PDOStatement::errorInfo() für das Datenbankobjekt aufrufen. 🎜🎜
  • 🎜<span style="font-size: 16px;"><strong>PDO::ERRMODE_WARNING </strong> span><span style="font-size: 16px;"></span></span>🎜
🎜Der PDO::ERRMODE_WARNING-Modus kann Fehlercodes festlegen, natürlich wird er nicht nur festgelegt Fehler Zusätzlich zum Code sendet PDO auch eine Nachricht, eine sehr traditionelle E_WARNING-Nachricht. Wenn wir debuggen oder testen müssen, möchten wir das Programm nicht unterbrechen, sondern herausfinden, was schief gelaufen ist. PDO::ERRMODE_WARNING Es ist Zeit, dass dieser Modus ins Spiel kommt🎜🎜
  • 🎜<span style="font-size: 16px;"> <strong>PDO::ERRMODE_EXCEPTION </strong></span>🎜
🎜Der PDO::ERRMODE_EXCEPTION-Modus kann auf den ersten Blick zusätzlich zum Festlegen von Fehlercodes auch Fehlercodes festlegen , PDO Sie können auch eine PDOException-Ausnahmeklasse auslösen und deren Eigenschaften so festlegen, dass sie Fehlercodes und Fehlermeldungen widerspiegeln. Der PDO::ERRMODE_EXCEPTION-Modus ist auch beim Debuggen sehr nützlich. Er kann potenziell problematische Bereiche im Code sehr schnell aufzeigen, da er die Stelle im Skript, an der der Fehler auftritt, effektiv vergrößert. 🎜🎜🎜PDO verwendet SQL-92 SQLSTATE , um Fehlercodezeichenfolgen zu standardisieren, und verschiedene PDO-Treiber sind für die Zuordnung ihrer nativen Codes zu den entsprechenden SQLSTATE-Codes verantwortlich. Die Methode PDO::errorCode() gibt einen einzelnen SQLSTATE-Code zurück. 🎜🎜Wenn Sie detailliertere Informationen zu diesem Fehler benötigen, stellt PDO auch eine PDO::errorInfo() -Methode zur Verfügung, um einen SQLSTATE-Code, einen spezifischen Treiberfehlercode und die Fehlerzeichenfolge dieses Treiberarrays zurückzugeben . 🎜🎜Ein weiterer sehr nützlicher Effekt des Ausnahmemodus besteht darin, dass Sie Ihre eigene Fehlerbehandlung klarer erstellen können als herkömmliche Warnungen im PHP-Stil. Im Ausnahmemodus ist im Vergleich zum stillen Modus und der expliziten Überprüfung des Rückgabewerts jedes Datenbankaufrufs weniger Code/Verschachtelung erforderlich . 🎜🎜Als nächstes schauen wir uns das Erstellen einer PDO-Instanz und das Festlegen des Fehlermodus anhand eines Beispiels an. Das Beispiel lautet wie folgt: 🎜
<?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();
    }
?>
🎜Im obigen Beispiel wird der Fehlermodus über die Methode PDO::setAttribute() festgelegt. Zusätzlich zum Festlegen des Fehlermodus auf diese Weise wird der Fehlermodus festgelegt kann auch beim Erstellen einer PDO-Instanz festgelegt werden. Das Beispiel lautet wie folgt: 🎜🎜<strong><span style="font-size: 20px;">PDO::errorCode()</span></strong>Methode🎜🎜PDO::errorCode() Die Methode wird hauptsächlich zum Abrufen von Fehlercodes verwendet, die beim Betrieb von Datenbankhandles auftreten. Diese Fehlercodes werden aufgerufen SQLSTATE-Code. 🎜🎜

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();
    }
?>

输出结果:

Wie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?

上述结果便是通过 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();
    }
?>

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

Wie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?

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

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

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Fehlern in PDO für das Lernen von PHP-Datenbanken um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was bedeutet .= in PHP?Nächster Artikel:Was bedeutet .= in PHP?