首頁  >  文章  >  後端開發  >  使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中擷取SQL語句中的錯誤方法三)

使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中擷取SQL語句中的錯誤方法三)

黄舟
黄舟原創
2017-04-28 17:43:083362瀏覽

使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中捕獲SQL語句中的錯誤方法三)

異常模式會建立一個PDOException,並設定erorCode 屬性,它可以將執行程式碼封裝到一個try{...}catch{...}語句中,未捕獲的異常將會導致腳本中斷,並顯示堆疊追蹤讓使用者了解是哪裡出現的問題!

在前兩篇文章《使用預設模式-PDO::ERRMODE_SILENT(PDO中擷取SQL語句中的錯誤方法一)》《使用警告模式-PDO:: ERRMODE_WARNING(PDO中擷取SQL語句中的錯誤方法二)》中我們介紹了預設模式以及例外模式兩種方法,那麼我們今天來介紹第三種方法來捕捉PDO中SQL語句的錯誤~

異常模式另一個非常有用的是,相比傳統PHP 風格的警告,可以更清晰地構建自己的錯誤處理,而且比起靜默模式和顯式地檢查每種數據庫調用的返回值,異常模式需要的程式碼/嵌套更少。

除設定錯誤碼之外,PDO 還會拋出一個 PDOException 異常類別並設定它的屬性來反射錯誤碼和錯誤訊息。此設定在偵錯期間也非常有用,因為它會有效放大腳本中產生錯誤的點,從而可以非常快速地指出程式碼中有問題的潛在區域! ( 記住:如果異常導致腳本終止,則事務被自動回滾)。

在執行資料庫中資料的刪除操作時,設定為異常模式,並且編寫一個錯誤的 SQL語句,體會異常模式與警告模式和預設模式的區別。

具體步驟如下:

(1) 建立一個php文件,連接資料庫,透過預定處理語句的prepare()和execute()方法執行SELECT查詢操作,透過while 語句和fetch ()方法完成資料的循環輸出,並且設定刪除超鏈接,連接到另一個php檔案中,傳遞的參數是資料的ID值,程式碼如下:

<?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[&#39;id&#39;];?>">删除</td>
        </tr>
        <?php
    }
    }catch(Exception $e){
        die("Error!:".$e->getMessage().&#39;<br>&#39;);
    }
    ?>
</table>

輸出得到的結果如下:

使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中擷取SQL語句中的錯誤方法三)

(2)建立另外一個文件,取得超連結的資料ID值,連接資料庫,透過setAttribute()方法設定為異常模式,定義DELETE刪除語句,刪除錯誤的數據表中的數據,並且透過try{...}catch{...}語句取得錯誤訊息,具體程式碼如下:

<?php
$id = $_GET[&#39;code_id&#39;];
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(&#39;:id&#39;,$_GET[&#39;code_id&#39;]);     //绑定更新数据
    $res->execute();            //执行查询语句,并返回结果集
}catch (PDOException $e){
    echo "PDO Exception Caught";
    echo &#39;Error with the database:<br>&#39;;
    echo &#39;SQL Query;&#39;.$query;
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    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  "
"; } }

注意:

在上面的程式碼中,在定義DELETE 刪除語句的時候,我們故意使用了錯誤的資料表名字user_12(正確的資料表名稱是:user),這裡是為了測試寫的!

在設定為異常模式後,執行錯誤的SQL語句,輸出結果如下:

使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中擷取SQL語句中的錯誤方法三)

關於PDO中擷取SQL語句中錯誤的三種方法到這裡我們就介紹完了,相信小伙伴們對於PDO中捕獲SQL語句的錯誤有一定的了解了,下一篇我們繼續給大家介紹PDO中錯誤處理的方法,具體請閱讀《 PDO中錯誤處理的方法一-errorCode()方法》!

以上是使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中擷取SQL語句中的錯誤方法三)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn