本系列教程面向零基礎學習者,在 Windows 平台手把手建立 Apache + PHP + MySQL 環境,創建資料庫、資料表,掌握命令列與 PHP 代碼雙軌並行的 CRUD 基礎操作,為後續動態網站開發奠基。
https://localhost/phpinfo.php 確認 PHP 運行;命令列 mysql -u root -p 確認 MySQL 連通-- 進入 MySQL 客戶端
mysql -u root -p
-- 查看現有資料庫
SHOW DATABASES;
-- 建立資料庫
CREATE DATABASE example;
-- 切換資料庫
USE example;
-- 建立資料表
CREATE TABLE tbl (
idx INT(3),
UserName VARCHAR(30),
LastName VARCHAR(50),
FreeText VARCHAR(100)
);
-- 查看表結構
SHOW COLUMNS FROM tbl;
-- 或 DESC tbl;
-- 插入測試資料(預設欄位順序)
INSERT INTO tbl VALUES (1, 'Rafi', 'Ton', 'Just a test');
-- 指定欄位插入(推薦,順序不拘)
INSERT INTO tbl (idx, UserName, LastName, FreeText)
VALUES (2, 'Alice', 'Wang', 'Hello World');
-- 查詢所有資料
SELECT * FROM tbl;
-- 修改資料
UPDATE tbl SET UserName = 'Berber' WHERE UserName = 'Rafi';
-- 多條件修改
UPDATE tbl SET UserName = 'Rafi' WHERE UserName = 'Berber' AND LastName = 'Ton';
-- 刪除資料(帶 LIMIT 防誤刪)
DELETE FROM tbl WHERE idx = 1 LIMIT 1;
-- 退出
EXIT;
| 操作 | 語法範例 | 關鍵點 |
|---|---|---|
| 建庫 | CREATE DATABASE db_name; | 名稱唯一,建議加 CHARACTER SET utf8mb4 |
| 建表 | CREATE TABLE t (id INT, name VARCHAR(50)); | 欄位定義:名稱 類型(長度) 約束 |
| 插入 | INSERT INTO t (id, name) VALUES (1, 'A'); | 指定欄位更安全,值順序對應欄位順序 |
| 查詢 | SELECT id, name FROM t WHERE id = 1; | * 表所有欄位,WHERE 篩選 |
| 修改 | UPDATE t SET name='B' WHERE id=1; | 必帶 WHERE,否則全表修改 |
| 刪除 | DELETE FROM t WHERE id=1 LIMIT 1; | 必帶 WHERE + LIMIT 1 防誤刪全表 |
<?php
// 連接配置
$host = 'localhost';
$user = 'root';
$pass = 'your_password';
$dbname = 'example';
// 建立連接 (mysqli 面向物件風格)
$conn = new mysqli($host, $user, $pass, $dbname);
// 檢查連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 設定字符集 (關鍵!防亂碼)
$conn->set_charset("utf8mb4");
echo "連接成功!";
// 簡單查詢
$sql = "SELECT * FROM tbl";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["idx"] . " - 姓名: " . $row["UserName"] . " " . $row["LastName"] . "<br>";
}
} else {
echo "無資料";
}
$conn->close();
?>
utf8mb4/UTF-8error_reporting(E_ALL); ini_set('display_errors', 1);prepare() + bind_param(),拒絕字串拼接 SQLhtmlspecialchars()$result->free()、$conn->close() 或使用 try-finally 確保釋放| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| 連接失敗 | 服務未啟動、端口錯誤、密碼錯誤、skip-name-resolve | 檢查服務狀態、netstat -an | findstr 3306、重置密碼 |
| 中文亂碼 | 字符集不一致 | 全鏈路 utf8mb4、SET NAMES utf8mb4、header('Content-Type: text/html; charset=utf-8') |
| SQL 語法錯誤 | 保留字衝突、引號缺失、類型不符 | 反引號包裹識別符 `idx`、參數化查詢 |
| 權限不足 | 用戶無該庫/表權限 | GRANT ALL ON example.* TO 'user'@'%'; FLUSH PRIVILEGES; |
完成本篇,你已具備:MySQL 命令列基本操作、PHP 連接查詢範本、核心 SQL 語法、避坑鐵律。下一篇將構建完整的「列表 → 新增 → 編輯 → 刪除」CRUD 閉環。