本文整理自 O'Reilly Network 經典文章,針對 LAMP 架構下的 PHP + MySQL 開發,精選 8 個高頻實用技巧,助你寫出更簡潔、健壯的程式碼。
傳統數字索引遍歷:
$temp = array("richmond", "tigers", "premiers");
for ($x = 0; $x < count($temp); $x++) {
echo $temp[$x] . " ";
}
進階寫法:foreach 直接取值,更可輸出鍵名:
$temp = array("club" => "richmond", "nickname" => "tigers", "aim" => "premiers");
foreach ($temp as $key => $value) {
echo "$key : $value ";
}
PHP 內建超過 50 個陣列處理函數,善用之可大幅減少樣板碼。
雙引號字串可直接解析變數:
$temp = "hello";
echo "$temp world"; // hello world
陣列元素嵌入時務必加花括號避免解析錯誤:
$arr = array("one" => 1);
echo "Value: {$arr['one']}"; // 正確
// echo "Value: $arr['one']"; // 錯誤
mysql_fetch_array() 同時支援數字與關聯索引,建議統一使用關聯鍵名提升可讀性:
while ($row = mysql_fetch_array($result)) {
echo "ID: {$row['cust_id']} ";
echo "Surname: {$row['surname']} ";
}
多表聯查同名欄位務必用別名:
SELECT winery.name AS wname, region.name AS rname
FROM winery, region
WHERE winery.region_id = region.region_id;
// PHP 端引用:$row['wname'], $row['rname']
聚合函數結果直接用別名或函數名作為鍵:$row['count(*)']。
),用瀏覽器「檢視原始碼」或 W3C 驗證器排查。$Counter++ vs $counter 導致無限迴圈。開啟 error_reporting(E_ALL); 可即時捕獲。「單部件查詢」指使用者點擊連結執行動作後停留原頁。關鍵點:
// action.php
// 執行資料庫操作...
header("Location: $HTTP_REFERER");
exit; // 必須加 exit,否則後續輸出會導致 headers already sent 錯誤
header() 必須在任何 HTML 輸出前呼叫,檢查前方空白行與 BOM。
問題:使用者重新整理導致 INSERT 重複執行。
解法:Post-Redirect-Get (PRG) 模式
// addcust.php
mysql_query($query);
header("Location: cust_receipt.php"); // 導向純顯示頁
exit;
原頁面重新整理不再觸發寫入。
緊急報表執行前對表加寫鎖(LOCK TABLES tbl WRITE),阻塞其他讀寫,確保資料一致性與查詢速度,用畢立即 UNLOCK TABLES。
替代 mysql_query(),查詢啟動後立即返回,不等待結果集全載入記憶體,適合大量資料串流處理。注意:無法使用 mysql_num_rows() 取得筆數。