:::
4-6 用PDO讀取資料
一、從資料庫中讀取資料
- 讀取資料庫的內容,一律用
select語法:SELECT `查詢的欄位` [FROM `資料表名稱` 附加的篩選條件]所有資料庫、資料表、欄位名稱,都建議前後加上
`` - 其中篩選條件語法如下:
[WHERE 篩選條件] [GROUP BY `欄位名稱`][HAVING GROUP的篩選條件] [ORDER BY {UNSIGNED_INTEGER | `欄位名稱` | FORMULA} [ASC | DESC] ,...] [LIMIT [起點,] 筆數] - 這些語法有順序關係,需注意,順序錯誤將無法執行。
二、利用AI來產生讀取資料庫語法
- 照例輸入提示詞:
請根據上述表單及資料庫欄位,
以PDO物件用prepare方式讀取所有 news 中的資料,並依照日期來由大致小排序,並產生PHP 8.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方式讀取
-
用 ? 佔位符讀取資料的語法為:
$stmt = $pdo->prepare('SELECT * FROM `資料表` WHERE `欄位` = ?'); $stmt->execute(['值']); - 用
fetch()方法來取資料,一次只會抓出一筆資料,所以一般會搭配while()迴圈以便將所有資料抓出while ($news = $stmt->fetch()) { echo "{$news['id']}<br>"; echo "{$news['title']}<br>"; ... } - 用
fetchAll()方法會抓出所有資料,抓出後再用foreach()迴圈中來一筆一筆拆開$all_news = $stmt->fetchAll(); foreach ($all_news as $news) { echo "{$news['id']}<br>"; echo "{$news['title']}<br>"; ... }
三、抓出所有資料
- 將
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了。
4-5 更新資料(寫入檔案資訊)