首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP MySQL 基礎操作完整指南:從連線到 CRUD

     編輯:PHP 相關知識

MySQL 客戶端連線

# Windows (WAMP 範例)
cd C:\wamp\bin\mysql\mysql5.5.8\bin
mysql.exe -h localhost -u root -p

# 登入後設定編碼避免中文亂碼
SET NAMES utf8mb4;

參數說明:-h 主機、-u 使用者、-p 密碼(建議不帶密碼讓終端機提示輸入,避免歷史紀錄洩露)。

資料庫管理

操作SQL 指令
建立資料庫CREATE DATABASE db_name CHARSET utf8mb4;
刪除資料庫DROP DATABASE db_name;
列出資料庫SHOW DATABASES;
切換資料庫USE db_name;

常用資料型別

分類型別說明
整數TINYINT1 位元組 (-128~127)
SMALLINT2 位元組
MEDIUMINT3 位元組
INT4 位元組(最常用)
BIGINT8 位元組
浮點數FLOAT單精度 4 位元組
DOUBLE雙精度 8 位元組
字串CHAR(n)固定長度,最多 255 字元,適合 MD5、手機號
VARCHAR(n)可變長度,最多 65,535 位元組,通用文字
日期時間DATEYYYY-MM-DD
TIMEHH:MM:SS
DATETIMEYYYY-MM-DD HH:MM:SS(推薦)

資料表操作

建立資料表範例

CREATE TABLE user_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age TINYINT UNSIGNED DEFAULT 0,
    balance DECIMAL(10,2) DEFAULT 0.00,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

欄位屬性關鍵字:

  • AUTO_INCREMENT:自動遞增(通常搭配 PRIMARY KEY)
  • PRIMARY KEY:主鍵,唯一識別每列
  • NOT NULL:禁止空值
  • DEFAULT value:預設值
  • UNIQUE:值唯一
  • UNSIGNED:無負號(整數型別)

查看表結構

DESC user_info;
SHOW CREATE TABLE user_info;

CRUD 核心操作

INSERT 新增

-- 指定欄位(推薦,順序可互換)
INSERT INTO user_info (username, email, age) VALUES ('Alice', 'alice@example.com', 25);

-- 多筆批次插入(高效能)
INSERT INTO user_info (username, email) VALUES
('Bob', 'bob@example.com'),
('Cindy', 'cindy@example.com');

SELECT 查詢

-- 基礎查詢
SELECT id, username, email FROM user_info WHERE age > 20;

-- 排序與分頁
SELECT * FROM user_info ORDER BY created_at DESC LIMIT 0, 10;  -- 第 1 頁
SELECT * FROM user_info ORDER BY created_at DESC LIMIT 10, 10; -- 第 2 頁

-- 聚合函數
SELECT COUNT(*) AS total, AVG(age) AS avg_age FROM user_info;

UPDATE 修改

UPDATE user_info SET age = 26, balance = 100.50 WHERE username = 'Alice';

-- 避免無 WHERE 導致全表更新!

DELETE 刪除

DELETE FROM user_info WHERE id = 5;

-- 條件刪除
DELETE FROM user_info WHERE age > 60 AND balance = 0;

WHERE 條件組合技巧

邏輯SQL說明
ANDage > 20 AND balance > 100同時滿足
ORage < 18 OR is_vip = 1滿足任一
INstatus IN (1,2,3)集合包含
BETWEENcreated_at BETWEEN '2024-01-01' AND '2024-12-31'範圍(含邊界)
LIKEusername LIKE 'A%'模糊比對,% 任意長度,_ 單字元
IS NULLemail IS NULL空值判斷

PHP 連線範例

<?php
$host = '127.0.0.1';
$db   = 'my_db';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    echo "連線成功";
} catch (PDOException $e) {
    die("連線失敗: " . $e->getMessage());
}

// 預備語句防 SQL 注入
$stmt = $pdo->prepare('SELECT * FROM user_info WHERE username = ?');
$stmt->execute(['Alice']);
$user = $stmt->fetch();
?>

最佳實踐提醒

  1. 永遠使用預備語句,杜絕 SQL 注入。
  2. 欄位明確列出,避免 SELECT * 暴露敏感欄位、增加網路傳輸。
  3. 索引優化:WHERE、JOIN、ORDER BY 涉及欄位建立索引。
  4. 編碼統一 utf8mb4:支援 Emoji 與完整 Unicode。
  5. 避免在迴圈執行 SQL:改用批次 INSERT 或 IN 查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved