首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP PDO 入門指南:從連接到增刪改查實戰

     編輯:PHP 相關知識

什麼是 PDO?

PHP Data Objects (PDO) 是 PHP 的資料庫訪問抽象層,提供統一介面操作多種資料庫(MySQL、PostgreSQL、SQLite 等),提高代碼可移植性與可維護性。特性:編碼一致、靈活、高性能(C 底層實現)、面向對象。

一、環境配置

修改 php.ini 啟用擴展:

extension=pdo_mysql
; extension=pdo_pgsql
; extension=pdo_sqlite

重啟 Web 服務,phpinfo() 檢查 PDO 區塊是否出現。

二、三種連接方式

1. DSN 參數形式(推薦)

try {
    $dsn = 'mysql:host=localhost;dbname=imooc_pdo;charset=utf8mb4';
    $pdo = new PDO($dsn, 'root', '', [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    var_dump($pdo);
} catch (PDOException $e) {
    echo '連接失敗: ' . $e->getMessage();
}

2. URI 形式

$dsn = 'uri:file:///path/to/dsn.txt'; // 文件內容: mysql:host=localhost;dbname=imooc_pdo
$pdo = new PDO($dsn, 'root', '');

3. php.ini 預定義

; php.ini
pdo.dsn.imooc = "mysql:host=localhost;dbname=imooc_pdo"
; PHP 代碼
$pdo = new PDO('imooc', 'root', '');

三、核心操作方法

方法用途返回值
exec($sql)執行 INSERT/UPDATE/DELETE/DDL影響行數 (int),失敗 false
query($sql)執行 SELECTPDOStatement 物件,失敗 false
prepare($sql)預處理語句(防注入)PDOStatement 物件
lastInsertId()獲取最後自增 IDstring/int
beginTransaction()開啟事務bool
commit() / rollBack()提交/回滾事務bool

四、完整 CRUD 範例

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', '', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

// 建表
$pdo->exec("CREATE TABLE IF NOT EXISTS user (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL UNIQUE,
    password CHAR(60) NOT NULL,
    email VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

// 新增(預處理)
$stmt = $pdo->prepare("INSERT INTO user (username, password, email) VALUES (?, ?, ?)");
$stmt->execute(['alice', password_hash('secret', PASSWORD_DEFAULT), 'alice@example.com']);
echo "新增 ID: " . $pdo->lastInsertId();

// 查詢
$stmt = $pdo->query("SELECT * FROM user");
while ($row = $stmt->fetch()) {
    echo "{$row['id']} - {$row['username']} - {$row['email']}
"; } // 修改 $stmt = $pdo->prepare("UPDATE user SET email = ? WHERE id = ?"); $stmt->execute(['alice_new@example.com', 1]); echo "影響行數: " . $stmt->rowCount(); // 刪除 $stmt = $pdo->prepare("DELETE FROM user WHERE id = ?"); $stmt->execute([1]); echo "刪除行數: " . $stmt->rowCount();

五、常見坑點提醒

  • exec() 不能用於 SELECT,否則無結果集返回。
  • 重複執行唯一鍵衝突的 INSERT,exec() 返回 false(非 0),需捕獲異常區分。
  • DSN 中 charset=utf8mb4 必須顯式指定,否則可能出現亂碼。
  • 生產環境務必開啟 ERRMODE_EXCEPTION,統一異常處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved