:::

4-6 用PDO讀取資料

一、從資料庫中讀取資料

  1. 讀取資料庫的內容,一律用 select 語法:
    SELECT `查詢的欄位` [FROM `資料表名稱` 附加的篩選條件]

    所有資料庫、資料表、欄位名稱,都建議前後加上``

  2. 其中篩選條件語法如下:
    [WHERE 篩選條件]
    [GROUP BY `欄位名稱`][HAVING GROUP的篩選條件]
    [ORDER BY {UNSIGNED_INTEGER | `欄位名稱` | FORMULA} [ASC | DESC] ,...]
    [LIMIT [起點,] 筆數]

     

  3. 這些語法有順序關係,需注意,順序錯誤將無法執行。

二、利用AI來產生讀取資料庫語法

  1. 照例輸入提示詞:
    請根據上述表單及資料庫欄位,
    以PDO物件用prepare方式讀取所有 news 中的資料,並依照日期來由大致小排序,並產生PHP 8.2的程式語法。
  2. 得到的結果如下:

    <?php
    // 建立資料庫連接
    $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);
    
        // 準備SQL語句
        $sql = "SELECT * FROM news ORDER BY date DESC";
    
        // 預備語句
        $stmt = $pdo->prepare($sql);
    
        // 執行語句
        $stmt->execute();
    
        // 取得結果集
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        // 輸出結果
        foreach ($results as $row) {
            // 處理每一筆資料
            $id = $row['id'];
            $title = $row['title'];
            $content = $row['content'];
            $author = $row['author'];
            $date = $row['date'];
            $category = $row['category'];
            $media = $row['media'];
            $views = $row['views'];
    
            // 輸出資料
            echo "ID: $id<br>";
            echo "標題: $title<br>";
            echo "內容: $content<br>";
            echo "作者: $author<br>";
            echo "日期: $date<br>";
            echo "類別: $category<br>";
            echo "媒體: $media<br>";
            echo "點閱數: $views<br>";
            echo "<br>";
        }
    } catch (PDOException $e) {
        echo "資料庫連接錯誤:" . $e->getMessage();
    }
    ?>

    大致上和 admin.php 的流程差不多,所以,其實可以直接拿 admin.php 來改即可。

三、用pdo的prepare方式讀取

  1. 用 ? 佔位符讀取資料的語法為:

    $stmt = $pdo->prepare('SELECT * FROM `資料表` WHERE `欄位` = ?');
    $stmt->execute(['值']);
  2. fetch() 方法來取資料,一次只會抓出一筆資料,所以一般會搭配 while() 迴圈以便將所有資料抓出
    while ($news = $stmt->fetch()) {
        echo "{$news['id']}<br>";
        echo "{$news['title']}<br>";
        ...
    }
  3. fetchAll() 方法會抓出所有資料,抓出後再用 foreach() 迴圈中來一筆一筆拆開
    $all_news = $stmt->fetchAll();
    foreach ($all_news as $news) {
        echo "{$news['id']}<br>";
        echo "{$news['title']}<br>";
        ...
    }
    

     

三、抓出所有資料

  1. admin.php 另存為 index.php,並將資料庫寫入的部份改為讀出所有資料
    <?php
    // 建立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);
    
        // 準備SQL語句
        $sql = "SELECT * FROM news ORDER BY date DESC";
    
        // 預備語句
        $stmt = $pdo->prepare($sql);
    
        // 綁定參數並執行語句
        $stmt->execute();
    
        $news = $stmt->fetchAll();
        foreach ($news as $row) {
            // 在這裡處理每一筆資料
            echo "<li>{$row['title']}</li>";
        }
    
    } catch (PDOException $e) {
        echo "資料庫連接錯誤:" . $e->getMessage();
    }
    

    執行看看,有看到文章的標題列表就表示OK了。


:::

書籍目錄

展開 | 闔起

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

計數器

今天: 1468146814681468
昨天: 1416141614161416
總計: 7340115734011573401157340115734011573401157340115