iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Build on AWS

從零到雲端:AWS 開發之路系列 第 12

Day12 將網站連接到 RDS MySQL(存資料)

  • 分享至 

  • xImage
  •  

昨天我們利用EC2建立了一個小小的動態網站(留言板),不過之前的動態留言板只存.txt檔,今天我們要把留言存到RDS MySQL資料庫,並能在網頁上即時讀取。

最初的版本是使用messages.txt儲存留言,也就是當使用者輸入留言後,PHP 程式會直接寫入一個文字檔。這種方式雖然簡單,但有以下限制:

  1. 無法方便查詢或排序留言
  2. 檔案容易被覆蓋或刪掉,資料缺乏安全性
  3. 多人同時存取時,可能會出現寫入衝突

改成使用RDS儲存

首先我們先在RDS上建立了一個MySQL資料庫,名稱為mydb1,裡面有一張messages資料表,結構如下:
(這邊就不細講RDS怎麼連,在第一週有做介紹,並用第一週的資料庫來做連線)

CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nickname VARCHAR(50) NOT NULL,
    message TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

然後修改昨日的PHP程式,讓它改用PDO連線到RDS,並把留言寫入messages資料表,再從資料庫讀出留言顯示。

什麼是PDO?

在我們的留言板程式裡,為了讓資料能存到RDS資料庫,我使用了PDO (PHP Data Objects)來連線。PDO 就像是一個「翻譯機」,幫PHP跟資料庫溝通。它的好處是:

  1. 通用性高:不只MySQL,還能連PostgreSQL、SQLite等很多資料庫
  2. 寫法統一:就算換資料庫,也不用大改程式
  3. 安全性好:支援「預處理語法 (prepared statements)」,可以防止SQL Injection(駭客攻擊常用手法)

簡單來說,PDO讓我們可以更安全、更方便地把資料存進資料庫。這也是為什麼在連接 RDS 時,我選擇用 PDO 而不是傳統的mysqli。

在實際修改之前,我們梳理一下留言送到資料庫的流程:

  1. 使用者在瀏覽器輸入留言並按下「送出」
  2. 瀏覽器把留言送到 EC2 上的 PHP 程式
  3. PHP 程式透過 PDO 連線連到 RDS (MySQL 資料庫)
  4. PHP 執行 INSERT 指令,把留言寫進資料庫
  5. 再重新整理網頁,PHP 執行 SELECT 把資料讀出來顯示

實作步驟

Step1: 登入EC2

ssh -i ~/Downloads/MyFirstEC2-key.pem ec2-user@你的EC2_IP

Step2: 切換到網站目錄

cd /var/www/html

Step3: 編輯index.php

sudo nano index.php

Step4: 將程式修改為使用 PDO + RDS,寫入與讀取留言都透過資料庫完成

<?php
date_default_timezone_set("Asia/Taipei");

$host = "<你的RDS Endpoint>";
$db   = "mydb1";
$user = "admin";
$pass = "你的密碼";
$charset = "utf8mb4";

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
    $pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
    die("連線失敗: " . $e->getMessage());
}

// 送出留言
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST["message"])) {
    $msg = htmlspecialchars($_POST["message"]);
    $stmt = $pdo->prepare("INSERT INTO messages (nickname, message) VALUES (?, ?)");
    $stmt->execute(['訪客', $msg]);
    header("Location: /");
    exit;
}

// 讀留言
$stmt = $pdo->query("SELECT nickname, message, created_at FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

Step5: 安裝 PHP MySQL 擴充

sudo yum install -y php-mysqlnd
sudo systemctl restart httpd

確認是否有連到資料庫

首先先在我們的網站中輸入我們想打的內容,確實按下送出後我們再次回到終端機
https://ithelp.ithome.com.tw/upload/images/20250926/20169251XIYGS4Vaej.jpg
進入 RDS 資料庫:

mysql -h <你的RDS Endpoint> -P 3306 -u admin -p

選擇資料庫:

USE mydb1;

查看留言是否有成功寫入:

SELECT * FROM messages ORDER BY created_at DESC;

只要能看到留言內容出現在結果中,就代表 PHP 網站確實已經把資料存到 RDS囉!
https://ithelp.ithome.com.tw/upload/images/20250921/20169251QvZeBwx6Sr.png


上一篇
Day11 在 EC2 架設 Apache,部署一個動態網站
系列文
從零到雲端:AWS 開發之路12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言