放棄「魔法式」的語法背誦,將資料庫操作還原為物理網路的「建立、傳輸、解構、銷毀」。
底層機制: PHP 嘗試透過 TCP/IP 向資料庫伺服器叩門。如果密碼錯誤或伺服器當機,將回傳 false。必須在此處設立「防禦檢查點」,否則後續操作全數崩潰。
$host = "localhost"; $user = "admin"; $pwd = "1234"; $db = "school_db"; // 變數 $conn 代表這條「實體通訊橋樑」 $conn = mysqli_connect($host, $user, $pwd, $db); // 防禦機制:斷言連線是否成功 if (!$conn) { die("連線失敗:" . mysqli_connect_error()); }
底層機制: 將 SQL 字串封裝並透過 $conn 橋樑發送給 MySQL 引擎。MySQL 引擎編譯執行後,會在它的記憶體中生成一個「結果集表 (Result Set)」,並將指標回傳給 PHP。
$sql = "SELECT id, name FROM students"; // 將 SQL 透過 $conn 發送,並將回傳的結果集指標存入 $result $result = mysqli_query($conn, $sql); // 驗證是否有資料 (空間判定) if (mysqli_num_rows($result) > 0) { // 準備進入解構階段 } else { echo "查無資料"; }
底層機制: PHP 無法直接讀取 MySQL 的二進位結果集。fetch_assoc 是個「提取器」,每次呼叫它,它就會從結果集中拔出「當前的一行」,並將該行轉化為 PHP 的「關聯陣列 (Hash Map)」,隨後指標自動向下移。
// 透過 while 迴圈進行時間軸延展,直到提取器回傳 false while ($row = mysqli_fetch_assoc($result)) { // 此時 $row 是一個陣列:['id' => 1, 'name' => 'Alice'] echo "學號:" . $row['id']; echo "姓名:" . $row['name'] . "<br>"; }
底層機制: 伺服器的 TCP 連線池是有限的(例如最多容許 150 條併發連線)。如果不主動切斷橋樑,遇到高流量時伺服器會因為「耗盡連線數」而癱瘓。
// 釋放結果集佔用的記憶體 (非必須,但為良好習慣) mysqli_free_result($result); // 強制切斷與 MySQL 的實體連線 mysqli_close($conn); echo "資料庫通訊生命週期結束。";