:::

4-2 PDO的資料庫連線

  1. 以下PDO的基本連線方式:
    // 建立資料庫連接
    $dsn = 'mysql:host=localhost;dbname=your_database;charset=utf8mb4';
    $username = 'your_username';
    $password = 'your_password';
    
    try {
        $pdo = new PDO($dsn, $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        //連線成功後要做的事
    
    } catch (PDOException $e) {
        echo "資料庫連接錯誤:" . $e->getMessage();
    }

    最後會得到一個例化的 PDO 物件 $pdo,接著我們就可以用這個物件做任何操作。

  2. 我們補上兩個設定
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

     

  3. PDO::ATTR_DEFAULT_FETCH_MODE 是指定的讀取後,存入陣列的模式,預定常數有
    1. PDO::FETCH_ASSOC — 關聯陣列形式,即要讀取 id 值要用 $news['id']最常用,我們指定為這個)
    2. PDO::FETCH_NUM — 數字索引陣列形式(一般會搭配 list() 使用),即要讀取 id 值要用 $news[0]
    3. PDO::FETCH_BOTH — 兩者陣列形式都有,這是預設值,即要讀取 id 值可用 $news['id']$news[0]
    4. PDO::FETCH_OBJ — 按照物件的形式,即要讀取 id 值要用 $news->id
    5. PDO::FETCH_LAZY —以關聯陣列、數字索引陣列和物件3種形式返回結果 ,即要讀取 id 值可用 $news['id']$news[0]$news->id
  4. 另外,關於禁用 prepared statements 的模擬效果目的是加快效能,其緣由可至「PHP 騙你,PDO prepare 並沒有準備好」這篇文章了解詳情
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  5. 至於 try...catch...是PHP用來做異常處理用的,可搭配 throw new Exception("錯誤訊息"); 來使用
  6. 由於 PDO 是物件,只要將實例化的 PDO 物件指向 NULL,即釋放資源
    $pdo = NULL;
  7. 最後,為了移植方便,我們將一些設定獨立出來變成這樣(日後會比較好修改)
    // 建立PDO連線
    $dbname = 'blog';
    $host='localhost';
    $charset='utf8mb4';
    $username = 'root';
    $password = '1qazXSW@';
    
    // 建立資料庫連接
    $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
    
    try {
        $pdo = new PDO($dsn, $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    
        //連線成功後要做的事
    
    } catch (PDOException $e) {
        echo "資料庫連接錯誤:" . $e->getMessage();
    }
  8. $dsn 必須改成雙引號,不然變數會沒作用
    $dsn     = "mysql:host=$host;dbname=$dbname;charset=$charset";

:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1970

計數器

今天: 1547154715471547
昨天: 2198219821982198
總計: 7326405732640573264057326405732640573264057326405