Verwenden Sie den Ausnahmemodus -PDO::ERRMODE_EXCEPTION (Methode 3 zum Erfassen von Fehlern in SQL-Anweisungen in PDO)
Der Ausnahmemodus erstellt eine PDOException und legt das erorCode-Attribut fest, das dies tun kann Der Ausführungscode ist in einer try{...}catch{...}-Anweisung gekapselt. Nicht abgefangene Ausnahmen führen zu einer Unterbrechung des Skripts und es wird ein Stack-Trace angezeigt, damit der Benutzer versteht, wo das Problem aufgetreten ist!
In den ersten beiden Artikeln „Verwenden Sie den Standardmodus-PDO::ERRMODE_SILENT (Methode 1 zum Erfassen von Fehlern in SQL-Anweisungen im PDO)“ „Verwenden Sie den Warnmodus-PDO :: ERRMODE_WARNING (Methode 2 zum Erfassen von Fehlern in SQL-Anweisungen in PDO) " Wir haben zwei Methoden eingeführt, den Standardmodus und den Ausnahmemodus. Deshalb werden wir heute die dritte Methode zum Erfassen von Fehlern in SQL-Anweisungen in PDO vorstellen~
Eine weitere sehr nützliche Sache des Ausnahmemodus besteht darin, dass Sie Ihre eigene Fehlerbehandlung klarer erstellen können als herkömmliche Warnungen im PHP-Stil. Im Vergleich zum stillen Modus und der expliziten Überprüfung des Rückgabewerts jedes Datenbankaufrufs erfordern Ausnahmemuster weniger Code /Verschachtelung.
Zusätzlich zum Festlegen des Fehlercodes löst PDO auch eine PDOException-Ausnahmeklasse aus und legt deren Eigenschaften so fest, dass sie den Fehlercode und die Fehlerinformationen widerspiegeln. Diese Einstellung ist auch beim Debuggen sehr nützlich, da sie effektiv auf die Stelle im Skript zoomt, an der der Fehler auftritt, sodass problematische potenzielle Bereiche des Codes sehr schnell lokalisiert werden können! (Denken Sie daran: Wenn eine Ausnahme dazu führt, dass das Skript beendet wird, wird die Transaktion automatisch zurückgesetzt.)
Wenn Sie den Löschvorgang von Daten in der Datenbank durchführen, versetzen Sie diese in den Ausnahmemodus und schreiben Sie eine falsche SQL-Anweisung, um den Unterschied zwischen Ausnahmemodus, Warnmodus und Standardmodus zu verstehen.
Die spezifischen Schritte lauten wie folgt:
(1) Erstellen Sie eine PHP-Datei, stellen Sie eine Verbindung zur Datenbank her und führen Sie die SELECT-Abfrageoperation über die geplanten Methoden Prepare() und Execute() aus processing-Anweisung und verwenden Sie die while-Anweisung und fetch Die ()-Methode schließt die Schleifenausgabe der Daten ab und setzt den Lösch-Hyperlink, um eine Verbindung zu einer anderen PHP-Datei herzustellen. Der Code lautet wie folgt:
<?php header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="select * from user";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res->execute(); //执行查询语句,并返回结果集 ?> <table border="1" width="500"> <tr> <td height="22" align="center" valign="middle">id</td> <td height="22" align="center" valign="middle">用户名</td> <td height="22" align="center" valign="middle">密码</td> <td height="22" align="center" valign="middle">操作</td> </tr> <?php while($result=$res->fetch(PDO::FETCH_ASSOC)){ // 循环输出查询结果集,并且设置结果集为关联数据形式。 ?> <tr> <td height="22" align="center" valign="middle"><?php echo $result["id"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["username"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["password"];?></td> <td height="22" align="center" valign="middle"><a href="2.php?code_id=<?php echo $result['id'];?>">删除</td> </tr> <?php } }catch(Exception $e){ die("Error!:".$e->getMessage().'<br>'); } ?> </table>
Die Ausgabeergebnisse lauten wie folgt:
(2) Erstellen Sie eine weitere Datei, rufen Sie den Daten-ID-Wert des Hyperlinks ab und stellen Sie eine Verbindung her Datenbank, versetzen Sie sie über die Methode setAttribute () in den Ausnahmemodus, definieren Sie die DELETE-Anweisung und löschen Sie falsche Daten in der Datentabelle. Die Fehlerinformationen werden über die Anweisung try{...}catch{...} abgerufen . Der spezifische Code lautet wie folgt:
<?php $id = $_GET['code_id']; if($id){ header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="delete * from user_12 where id = $id";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res ->bindParam(':id',$_GET['code_id']); //绑定更新数据 $res->execute(); //执行查询语句,并返回结果集 }catch (PDOException $e){ echo "PDO Exception Caught"; echo 'Error with the database:<br>'; echo 'SQL Query;'.$query; echo '<pre class="brush:php;toolbar:false">'; echo "Error:".$e -> getMessage()."<br>"; echo "Code:".$e ->getCode()."<br>"; echo "File:".$e ->getFile()."<br>"; echo "Line:".$e ->getLine()."<br>"; echo "Trace:".$e ->getTraceAsString()."<br>"; echo "
Hinweis:
Im obigen Code beim Definieren Bei der DELETE-Löschanweisung haben wir absichtlich den falschen Datentabellennamen user_12 verwendet (der korrekte Datentabellenname lautet: user). Dies wurde zum Testen geschrieben!
Nach dem Wechsel in den Ausnahmemodus wird die falsche SQL-Anweisung ausgeführt und das Ausgabeergebnis lautet wie folgt:
Über die Erfassung SQL-Anweisungen in PDO Wir haben die Einführung der drei Methoden zur Fehlerbehandlung hier abgeschlossen. Ich glaube, dass jeder ein gewisses Verständnis für Fehler bei der Erfassung von SQL-Anweisungen in PDO hat. Im nächsten Artikel werden wir Ihnen weiterhin die Fehlerbehandlungsmethoden vorstellen PDO. Weitere Informationen finden Sie unter „Methode 1 der Fehlerbehandlung in PDO – errorCode()-Methode 》!
Das obige ist der detaillierte Inhalt vonVerwenden Sie den Ausnahmemodus PDO::ERRMODE_EXCEPTION (Methode drei, um Fehler in SQL-Anweisungen in PDO zu erfassen).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!