核心流程
- 建立連線:
mysqli_connect()
- 執行查詢:
mysqli_query($conn, "SELECT * FROM example")
- 取得結果集:
mysqli_fetch_assoc($result) 逐列讀取關聯陣列
- 釋放資源:
mysqli_free_result($result)
- 關閉連線:
mysqli_close($conn)
完整範例(現代 mysqli 寫法)
<?php
$conn = mysqli_connect("localhost", "admin", "1admin", "test");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM example";
$result = mysqli_query($conn, $sql);
if (!$result) {
die("Query failed: " . mysqli_error($conn));
}
if ($row = mysqli_fetch_assoc($result)) {
echo "Name: " . htmlspecialchars($row['name']);
echo " Age: " . htmlspecialchars($row['age']);
} else {
echo "No data found.";
}
mysqli_free_result($result);
mysqli_close($conn);
?>
關鍵函數對照
| 舊 mysql_* | 新 mysqli (OO) | 新 mysqli (程序式) |
| mysql_connect | $mysqli = new mysqli() | mysqli_connect() |
| mysql_query | $mysqli->query() | mysqli_query() |
| mysql_fetch_array | $result->fetch_array() | mysqli_fetch_array() |
| mysql_fetch_assoc | $result->fetch_assoc() | mysqli_fetch_assoc() |
| mysql_error | $mysqli->error | mysqli_error() |
| mysql_close | $mysqli->close() | mysqli_close() |
進階:預處理語句(防 SQL 注入)
$stmt = $conn->prepare("SELECT name, age FROM example WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// 處理資料
}
$stmt->close();
常見錯誤避坑
- 欄位名大小寫敏感:PHP 陣列鍵需與 SQL 欄位名完全一致
- 未檢查
mysqli_query() 回傳值導致後續報錯
- 直接輸出資料庫內容未
htmlspecialchars() 造成 XSS
- 舊
mysql_* 函數已移除,請全面遷移至 mysqli 或 PDO
- 上一篇文章: PostgreSQL 函數參數突破 32 個限制:使用複合類型封裝傳遞
- 下一篇文章: MySQL 備份策略對比:檔案級直複製 vs mysqldump 邏輯備份
Copyright ©
程式碼之家 All Rights Reserved