最好的學習方式是「從實例出發」。本文拆解一個完整的 PHP + MySQL 計數器程式,提煉出 SELECT、INSERT、UPDATE、DELETE 四大核心操作的實戰寫法。
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$conn = mysql_connect('host','root','pass');
mysql_select_db('db',$conn);
// 1. 查詢該 IP 是否存在
$sql = "SELECT * FROM counter WHERE ip='$ip'";
$res = mysql_query($sql,$conn);
$num = mysql_num_rows($res);
// 2. 統計總訪問數
$total = mysql_num_rows(mysql_query("SELECT * FROM counter",$conn));
if ($num == 0) {
// 首次訪問:INSERT
$sql = "INSERT INTO counter(ip,sum,countdata) VALUES('$ip',1,'$total')";
mysql_query($sql,$conn);
} else {
// 回訪:UPDATE 累加
$row = mysql_fetch_array(mysql_query("SELECT sum FROM counter WHERE ip='$ip'"));
$sum = $row['sum'] + 1;
mysql_query("UPDATE counter SET sum='$sum' WHERE ip='$ip'");
}
?>
| 需求 | SQL 範例 |
|---|---|
| 全表所有欄位 | SELECT * FROM table1; |
| 指定欄位 | SELECT field1,field2 FROM table1; |
| 統計筆數 | SELECT COUNT(*) FROM table2; |
| 多表關聯 | SELECT t1.f1,t2.f2 FROM t1,t2 WHERE t1.id=t2.id; |
| 條件+排序 | SELECT * FROM t1 WHERE f1='v1' ORDER BY f1; |
| 分頁 | SELECT * FROM t1 WHERE f1='v1' ORDER BY f1 DESC LIMIT n; |
| 模糊查詢 | SELECT * FROM t2 WHERE name LIKE '%$keyword%'; |
| 子查詢 | SELECT * FROM t1 WHERE id IN (SELECT id FROM t2...); |
| 最大值 | SELECT MAX(field1) AS f1 FROM t1; |
UPDATE table1 SET field1='v1', field2='v2' WHERE field3='v3';
SET 指定欄位新值,WHERE 限定範圍(省略則全表更新)。
-- 基本語法
INSERT INTO table1 VALUES('v1','v2',...);
-- REPLACE:若唯一鍵衝突則先刪後插
REPLACE INTO tbl_name(col1,col2,col3) VALUES('1','2','3');
DELETE FROM table1 WHERE field1='v1' AND field2='v2';
無 WHERE 會清空全表,謹慎使用。
mysql_* 函數,現代專案請改用 PDO 或 mysqli(支援預處理語句,防 SQL 注入)。INSERT ... ON DUPLICATE KEY UPDATE 或 Redis 原子計數。