首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

從 PHP 計數器實例學 MySQL 查詢、插入、更新、刪除核心語法

     編輯:MySQL 資料庫相關知識

透過一個簡易的 PHP 訪客計數器範例,帶領初學者認識 MySQL 四大核心操作:SELECT 查詢、INSERT 插入、UPDATE 更新、DELETE 刪除,並說明常用子句與進階用法。

範例程式碼解析(簡化版)

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$conn = mysqli_connect('localhost', 'root', 'pwd', 'db');

-- 1. 查詢該 IP 是否存在
$sql = "SELECT * FROM counter WHERE ip = '$ip'";
$res = mysqli_query($conn, $sql);
$num = mysqli_num_rows($res);

-- 2. 統計總訪客數
$total_res = mysqli_query($conn, "SELECT * FROM counter");
$total = mysqli_num_rows($total_res);

if ($num == 0) {
    -- 首次訪問:插入新紀錄
    $sql = "INSERT INTO counter (ip, sum, countdata) VALUES ('$ip', 1, $total+1)";
    mysqli_query($conn, $sql);
} else {
    -- 回頭客:更新個人計數
    $row = mysqli_fetch_assoc(mysqli_query($conn, "SELECT sum FROM counter WHERE ip='$ip'"));
    $new_sum = $row['sum'] + 1;
    mysqli_query($conn, "UPDATE counter SET sum=$new_sum WHERE ip='$ip'");
}
mysqli_close($conn);
?>

一、SELECT 查詢語法大全

場景SQL 範例
查所有欄位SELECT * FROM table1;
查指定欄位SELECT field1, field2 FROM table1;
統計筆數SELECT COUNT(*) FROM table2;
多表連接SELECT t1.f1, t2.f2 FROM table1 t1, table2 t2 WHERE t1.f1='val';
條件篩選+排序SELECT * FROM table1 WHERE f1='v1' AND f2='v2' ORDER BY f1;
排序+限制筆數SELECT * FROM table1 WHERE f1='v1' ORDER BY f1 DESC LIMIT n;
模糊查詢SELECT * FROM table2 WHERE name LIKE '%$keyword%';
子查詢SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 ...);
最大值SELECT MAX(field1) AS field1 FROM table1;

二、UPDATE 更新語法

UPDATE table1
SET field1='value1', field2='value2'
WHERE field3='value3';
  • SET 指定要修改的欄位與新值。
  • WHERE 限定更新範圍;省略 WHERE 將更新全表,極度危險。
  • 可搭配運算式:SET counter = counter + 1。

三、INSERT 插入語法

1. VALUES 形式(指定值)

INSERT INTO table1 VALUES ('val1', 'val2', ...);
  • 需按表定義順序提供所有欄位值。

2. 指定欄位名稱(推薦,順序不拘)

INSERT INTO table1 (col1, col2) VALUES ('val1', 'val2');

3. REPLACE INTO(主鍵/唯一鍵衝突時刪舊插新)

REPLACE INTO tbl_name (col1, col2) VALUES ('val1', 'val2');
  • 若唯一鍵值已存在,先刪除舊列再插入新列;否則等同 INSERT。

4. INSERT ... SELECT(從其他表複製資料)

INSERT INTO target_table (col1, col2)
SELECT col1, col2 FROM source_table WHERE condition;

四、DELETE 刪除語法

DELETE FROM table1
WHERE field1='value1' AND field2='value2';
  • 刪除符合條件的列,回傳刪除筆數。
  • 省略 WHERE 將清空全表(TRUNCATE TABLE 更快、不可回滾)。
  • 配合 LIMIT 限制刪除筆數:DELETE FROM logs WHERE created_at < '2020-01-01' LIMIT 10000;

進階:子查詢與 SELECT ... INTO

  • 子查詢: WHERE id IN (SELECT id FROM ...)、WHERE EXISTS (SELECT 1 FROM ...)。
  • SELECT ... INTO OUTFILE: 導出檔案(需 FILE 權限)。
    SELECT * INTO OUTFILE '/tmp/data.csv' FIELDS TERMINATED BY ',' FROM table1;
  • INSERT ... SELECT: 替代 SELECT ... INTO TABLE(MySQL 不支援)。

PHP 開發安全提醒

  1. 防 SQL 注入: 全面改用 mysqli_prepare / PDO::prepare 參數化查詢,勿直接拼接變數。
  2. 錯誤處理: mysqli_query($conn, $sql) or die(mysqli_error($conn)) 僅供開發除錯,生產環境應記錄日誌、回傳友善錯誤。
  3. 資源釋放: mysqli_free_result($res)、mysqli_close($conn),或依賴腳本結束自動釋放。
  4. 編碼一致: 連線後執行 SET NAMES utf8mb4,表/欄位字元集同為 utf8mb4。

掌握 CRUD 四大核心語法,並養成參數化、索引意識、錯誤處理習慣,即能建立健壯的資料庫應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved