PHP 操作 MySQL 時的關鍵語法細節與資料型別陷阱,新手必讀。
; 結束。// 正確
mysql_query("INSERT INTO t (a,b) VALUES ('$a','$b')");
// 錯誤 (額外分號)
mysql_query("INSERT INTO t (a,b) VALUES ('$a','$b');");
\G 結尾替代分號,欄位垂直列出。
SELECT * FROM users WHERE id=1\G
| 型別 | 正確認知 | 備註 |
|---|---|---|
| TEXT | 非標準型別名,實為 LONG VARCHAR / MEDIUMTEXT / LONGTEXT 系列 | 依長度選擇 TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT |
| DATE | 格式 YYYY-MM-DD (ISO 8601) | PHP 產生:date('Y-m-d');支援減法得天數差 |
| SET | 可儲存多個預定值 (最多 64 個),位元組合存儲 | ENUM 單選 (最多 65535 個);超過 64 個需拆多欄位 |
| 萬用字元 | 用途 | 範例 |
|---|---|---|
* | SELECT 選欄位:所有欄位 | SELECT * FROM t |
% | WHERE 值比對:任意長度字串 (含空) | WHERE name LIKE '%keyword%' |
_ | WHERE 值比對:單一任意字元 | WHERE code LIKE 'A_' |
* 用於欄位清單,% 用於值比對,**必須搭配 LIKE 關鍵字**。SELECT * FROM t WHERE col LIKE '%' 等同無條件。LIKE '%...%' 導致全表掃描,大表必須用全文索引或外部搜尋引擎。$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
原文提到的 addslashes()、magic_quotes_gpc 已棄用/移除 (PHP 5.4+),**務必使用 PDO/MySQLi 參數化查詢**。