PHP Data Objects (PDO) 是一種在 PHP 程式語言中,用來操作資料庫的輕量級介面,不管您連結的是哪一種資料庫,都可以使用 PDO 提供的方法進行操作。PDO 早在 PHP 5.1 時就已經推出,但多數的開發人員還是使用 mysql 或 mysqli 來操作資料庫,儘管 mysql 在 PHP 5.5 已經被官方棄用,多數的開發人員還是選擇程式碼變動較少的 mysqli,而不願選擇變動比較大的 PDO。

事實上使用 PDO 是可以帶來諸多好處的,例如:防止 sql injection、物件導向、可以使用例外處理 (try catch)...等,且目前新版的 PHP 也是建議使用 PDO 來操作資料庫,這篇文章將快速的介紹 PHP 如何使用 PDO 對資料庫進行新增、刪除、修改、查詢等操作,本文語法同樣適用 MariaDB。

連接/關閉資料庫

            
                // PDO 連線設定
                $options = [
                    PDO::ATTR_PERSISTENT => false,
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES => false,
                    PDO::ATTR_STRINGIFY_FETCHES => false,
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
                ];

                //資料庫連線
                try {
                    $pdo = new PDO('mysql:host=資料庫位址;port=連接連接埠;dbname=資料庫名稱', '帳號', '密碼', $options);
                    $pdo->exec('SET CHARACTER SET utf8mb4');
                } catch (PDOException $e) {
                    throw new PDOException($e->getMessage());
                }

                //關閉資料庫
                unset($pdo);
            
        

詳細的 PDO 連線設定請參考下列網址:

新增

            
                $data = ['1', 'test0001'];
                $sql = 'INSERT INTO user (sn, account) VALUES (?, ?)';
                $sth = $pdo->prepare($sql);
                try {
                    if ($sth->execute($data)) {
                        echo '新增成功';
                    } else {
                        echo '新增失敗';
                    }
                } catch (PDOException $e) {
                    echo '新增失敗';
                }
            
        

大家是否有發現 VALUES 的地方是用問號,這邊的問號會自動被 $data 的資料依序取代。

刪除

            
                $query = 'DELETE FROM user WHERE sn = 1';
                $sth = $pdo->prepare($query);
                try {
                    if ($sth->execute()) {
                        echo '刪除成功';
                    } else {
                        echo '刪除失敗';
                    }
                } catch (PDOException $e) {
                    echo '刪除失敗';
                }
            
        

修改

            
                $data = ['test0002'];
                $query = 'UPDATE user SET account = ? WHERE sn = 1';
                $sth = $pdo->prepare($query);
                try {
                    if ($sth->execute($data)) {
                        echo '修改成功';
                    } else {
                        echo '修改失敗';
                    }
                } catch (PDOException $e) {
                    echo '修改失敗';
                }
            
        

查詢

            
                $sql = 'SELECT * FROM user WHERE sn = :sn';
                $stmt = $pdo->prepare($sql);
                $stmt->bindValue(':sn', '1');
                $stmt->execute();

                // 取得單筆資料
                $stmt->fetch(PDO::FETCH_ASSOC);

                // 取得多筆資料
                $stmt->fetchAll(PDO::FETCH_ASSOC);
            
        

延伸閱讀