首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 與 MySQL 開發實戰 8 大核心技巧總結

     編輯:PHP 綜合知識

1. 善用關聯陣列與 foreach

// 不推薦:數字索引
$temp[0] = "richmond";
$temp[1] = "tigers";
for ($x=0; $x "richmond", "nickname" => "tigers", "aim" => "premiers"];
foreach ($temp as $key => $value) {
    echo "$key : $value ";
}

PHP 提供 50+ 陣列函數,善用 array_map、array_filter、array_reduce 等函數式風格操作。

2. 雙引號字串內插變數的正確姿勢

$temp = ["one" => 1, "two" => 2];

// 可行但不建議
echo "The first element is $temp[one].";

// 推薦:花括號語法,清晰界定變數邊界
echo "The first element is {$temp['one']}.";

// 複雜表達式也支援
echo "Total: {$temp['one'] + $temp['two']}";

3. 資料庫查詢結果採用關聯陣列存取

$result = mysqli_query($conn, "SELECT cust_id, surname, firstname FROM customer");

while ($row = mysqli_fetch_assoc($result)) {
    echo "ID: {$row['cust_id']}\n";
    echo "姓氏: {$row['surname']}\n";
    echo "名字: {$row['firstname']}\n\n";
}

多表 JOIN 別名技巧:

SELECT w.name AS wname, r.name AS rname
FROM winery w, region r
WHERE w.region_id = r.region_id;
// 存取:$row['wname'], $row['rname']

聚合函數別名:

SELECT COUNT(*) AS total FROM customer;
// 存取:$row['total'](而非 $row['COUNT(*)'])

4. 常見 Bug 排查:HTML 結構錯誤導致頁面不顯示

症狀:瀏覽器無輸出、Document Contains No Data、頁面截斷。
成因多為 HTML 標籤未正確閉合(</table>、</form>、</div> 缺失)。

解決:檢視原始碼 → W3C 驗證器 validator.w3.org → 開啟 PHP 最高錯誤報告:

error_reporting(E_ALL);
ini_set('display_errors', 1);

5. 善用 header() 處理單一操作導向

場景:用戶點擊連結執行動作(如刪除、登出),完成後停留原頁或導向新頁。

// action.php
// 執行資料庫操作...
header("Location: " . $_SERVER['HTTP_REFERER']); // 返回上一頁
exit; // 必須 exit,防止後續輸出干擾 header

常見錯誤:

  • header() 前有輸出(空白行、BOM、echo)→ headers already sent
  • 忘記 exit 導致腳本繼續執行

6. 解決重新整理重複提交

問題:POST 提交後按 F5 重新整理,瀏覽器重送請求導致重複寫入。

解決:Post-Redirect-Get (PRG) 模式

// addcust.php - 處理 POST
mysqli_query($conn, "INSERT INTO customer ...");
// 關鍵:重導向至結果頁(GET)
header("Location: cust_receipt.php");
exit;

// cust_receipt.php - 顯示結果(GET)
echo "客戶新增成功!";

重新整理 cust_receipt.php 不會重複執行 INSERT。

7. 鎖機制提升關鍵查詢效能

// 緊急報表:獨佔表鎖,阻塞其他讀寫
mysqli_query($conn, "LOCK TABLES report_table WRITE");
/* 執行複雜報表查詢 */
mysqli_query($conn, "UNLOCK TABLES");

慎用:會嚴重影響併發,僅限維護窗口或極高優先度任務。

8. mysql_unbuffered_query:大量資料串流處理

$result = mysqli_unbuffered_query($conn, "SELECT * FROM huge_table");
// 立即返回,不等待全部資料傳輸到客戶端緩衝區
while ($row = mysqli_fetch_assoc($result)) {
    // 逐行處理,記憶體佔用極低
    processRow($row);
}

限制:無法使用 mysqli_num_rows()(結果集大小未知)、查詢未完成前不可執行其他查詢(同一連線)。

現代化補充建議

  • 全面改用 PDO / mysqli(mysql_* 已移除)
  • 使用 Prepared Statements 防 SQL 注入
  • 採用 連線池(如 PHP-FPM + persistent connections)
  • 大量寫入考慮 LOAD DATA INFILE 或批次 INSERT
  • 慢查詢開啟 slow_query_log 定期分析
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved