MySQL 每行命令皆以分號 ; 結束。但當 SQL 語句嵌入 PHP 程式碼時,建議省略尾端分號,否則 PHP 解析器可能因雙重分號產生語法錯誤。範例:
mysql_query("INSERT INTO tablename(first_name,last_name) VALUES('$first_name','$last_name')");
PHP 執行時會自動補上分號,省略反而更安全。
使用 mysql_fetch_array() 取得的資料列,可同時以數字索引($row[0])或關聯索引($row["cust_id"])存取。關聯式寫法可讀性遠優於數字索引。
while ($row = mysql_fetch_array($result)) {
echo "ID: {$row['cust_id']}\n";
echo "Surname: {$row['surname']}\n";
echo "First name: {$row['firstname']}\n\n";
}
當兩張表擁有相同欄位名稱時,務必使用 AS 定義別名,避免結果集衝突:
SELECT winery.name AS wname, region.name AS rname
FROM winery, region
WHERE winery.region_id = region.region_id;
程式中即以 $row["wname"]、$row["rname"] 取值。
SELECT winery.region_id FROM winery → 以 $row["region_id"] 取值SELECT COUNT(*) FROM customer → 以 $row["COUNT(*)"] 取值LONG VARCHAR 或 MEDIUMTEXT 等別名。YYYY-MM-DD,PHP 可用 date("Y-m-d") 取得。兩個 DATE 相減可直接得到天數差。mysql_unbuffered_query() 提升腳本效能此函式查詢後立即回傳,不等待鎖定也不緩衝結果集,適合處理大量資料串流。注意:無法使用 mysql_num_rows() 取得筆數,因結果集大小未知。
* 用於比對欄位名(如 SELECT *)% 用於比對欄位值,需搭配 LIKE(如 WHERE user_id LIKE '%')_ 代表單一任意字元NOT NULL:插入空值時寫入 NULLNOT NULL:插入空值時,數值型填 0,字串型填空字串,ENUM 填第一個預設值NULL 與空字串 '' 不同:% 可比對空字串,但無法比對 NULL;查詢 NULL 必須用 IS NULLNOT NULL,減少查詢邏輯錯誤