1. 分號 ; 在 PHP 中的處理
- MySQL 命令列需以分號結束
- 嵌入 PHP 字串時請省略分號:
mysql_query("INSERT ... VALUES('$a','$b')")
- 原因:PHP 同樣用分號結束陳述式,殘留分號會干擾解析器
- 垂直顯示結果技巧:
SELECT * FROM table \G (僅命令列工具支援)
2. 三大易混淆資料型別
| 型別 | 正確認知 |
| TEXT | 非獨立型別,實為 LONG VARCHAR 或 MEDIUMTEXT 別名 |
| DATE | 格式 YYYY-MM-DD,PHP 取得:date("Y-m-d"),支援減法得天數差 |
| SET | 可存多值 (位元組合),最多 64 個預定值;ENUM 單值但可 65535 個預定值 |
3. 通配符完整對照
| 符號 | 用途 | 範例 |
* | SELECT 欄位清單:所有欄位 | SELECT * FROM t |
% | LIKE 模式:任意長度字串 (需搭配 LIKE) | WHERE name LIKE '王%' |
_ | LIKE 模式:單一任意字元 | WHERE code LIKE 'A__' |
4. NOT NULL 與空值/NULL 的陷阱
- 未填欄位預設寫入
NULL
NOT NULL 限制:- 一般欄位 → 拒絕寫入
- ENUM 欄位 → 自動填入第 1 個枚舉值
- 關鍵差異:
% 可比對空字串,但無法比對 NULL
安全查詢模式
if (!$city) $city = "%";
$sql = "SELECT * FROM users
WHERE name='王小明'
AND (city LIKE '$city' OR city IS NULL)";
- 搜尋 NULL 必須用
IS NULL,LIKE 無效
- ALTER TABLE 新增欄位時,舊列值可能是 NULL 或空字串 (MySQL 版本差異),查詢需同時處理