使用PDO執行SQL語句exec()、query()


在PHP腳本中,通過PDO執行SQL查詢與數據庫進行交互,可以分為三種不同的策略,使用哪一種方法取決於你要做什么操作。

1、使用PDO::exec()方法

當執行INSERT、UPDATE和DELETE等沒有結果集的查詢時,使用PDO對象中的exec()方法去執行。該方法成功執行后,將返回受影響的行數。注意,該方法不能用於SELECT查詢。示例如下所示:

 

<?php 
    try {
        $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $pdo->exec('set names "utf8"');
    } catch (PDOException $e) {
        exit("數據庫連接失敗: ".$e -> getMessage());
    }

    $sql = "UPDATE contactInfo SET phone='15801680168' where name='高某某'";

    //使用exec()方法可以執行INSERT、UPDATE、DELETE等

    $affected = $pdo->exec($sql);

    if ($affected) {
        echo "數據表中受影響的行數為: ".$affected;
    } else {
        print_r($pdo->errorInfo());
    }
    
 ?>

 

2、使用PDO::query()方法

當執行返回結果集的SELECT查詢時,或者所影響的行數無關緊要時,應當使用PDO對象中的query()方法。如果該方法成功執行指定的查詢,則返回一個PDOStatement對象。如果使用了query()方法,並想了解獲取的數據行總數,可以使用PDOStatement對象中的rowCount()方法獲取。示例代碼如下所示:

 <?php  
     try {
        $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $pdo->exec('set names "utf8"');
    } catch (PDOException $e) {
        exit("數據庫連接失敗: ".$e -> getMessage());
    }
    $sql = "SELECT name, phone, email FROM contactInfo WHERE departmentId='D01'";
    try {
        //執行SELECT查詢,並返回PDOstatement對象  
        $pdostatement = $pdo->query("$sql");
        echo "一共從表中獲取到".$pdostatement->rowCount()."條記錄:n";
        //利用循環輸出
        foreach ($pdostatement as $row) {
            echo $row['name'] . "t";           //輸出從表中獲取到的聯系人的名字
            echo $row['phone'] . "t";       //輸出從表中獲取到的聯系人的電話
            echo $row['email'] . "n";       //輸出從表中獲取到的聯系人的電子郵件
        }
    } catch (PDOException $e) {
        echo $e->getMessage(); 
    }
 ?>

3、使用PDO::prepare()和PDOStatement::execute()兩個方法

當同一個查詢需要多次執行時(有時需要迭代傳入不同的列值),使用預處理語句的方式來實現效率會更高。使用預處理語句就需要使用PDO對象中的prepare()方法去准備一個將要執行的查詢,再使用PDOStatement對象中的execute()方法來執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM