| 函數 | 用途 |
mysqli_connect() / mysql_connect() | 建立連接(推薦 mysqli/PDO) |
mysqli_select_db() | 選擇默認數據庫 |
mysqli_query() | 執行 SQL |
mysqli_fetch_assoc/array/row() | 獲取結果行 |
mysqli_num_rows() | 結果集行數 |
mysqli_affected_rows() | 影響行數 |
mysqli_insert_id() | 自增 ID |
mysqli_real_escape_string() | 轉義防注入 |
mysqli_close() | 關閉連接 |
mysqli_error() / mysqli_errno() | 錯誤信息/代碼 |
注意: 老式 mysql_* 函數已棄用(PHP 7 移除),請使用 mysqli_* 或 PDO。
典型交互流程範例
<?php
// config.php - 集中配置
$host = 'localhost';
$user = 'webapp';
$pass = 'secret';
$db = 'sampdb';
// connect.php - 連接封裝
function db_connect() {
global $host, $user, $pass, $db;
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
error_log("MySQL connect failed: " . mysqli_connect_error());
die("系統繁忙,請稍後再試");
}
mysqli_set_charset($conn, 'utf8mb4');
return $conn;
}
// list_members.php - 列表頁
require 'connect.php';
$conn = db_connect();
$sql = "SELECT id, last_name, first_name, email FROM member ORDER BY last_name";
$res = mysqli_query($conn, $sql);
if (!$res) {
error_log("Query failed: " . mysqli_error($conn));
die("查詢失敗");
}
echo "<table border=1><tr><th>ID</th><th>姓</th><th>名</th><th>郵箱</th></tr>";
while ($row = mysqli_fetch_assoc($res)) {
echo "<tr>";
echo "<td>" . htmlspecialchars($row['id']) . "</td>";
echo "<td>" . htmlspecialchars($row['last_name']) . "</td>";
echo "<td>" . htmlspecialchars($row['first_name']) . "</td>";
echo "<td>" . htmlspecialchars($row['email']) . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($res);
mysqli_close($conn);
?>
安全關鍵點
- 預處理語句:
mysqli_prepare() + bind_param() 徹底防注入
- 輸出轉義:
htmlspecialchars() 防 XSS
- 錯誤不外露: 生產環境關閉
display_errors,記錄 error_log
- 最小權限: Web 賬號僅擁有業務必需的增刪改查權限
PHP 4 → 5/7/8 遷移提示
- 對象模型重寫(傳值→傳引用)
- 新增
mysqli 擴展、PDO 抽象層
register_globals 默認關閉,超全局變量 $_GET/$_POST
- 異常處理
try/catch
- 類型聲明、標量/返回類型提示(PHP 7+)
總結
PHP 作為為 Web 設計的模板語言,與 MySQL 天然契合。現代開發請採用 PDO 或 mysqli 預處理語句、Composer 管理依賴、框架分層,將數據庫交互封裝於 Repository/DAO 層,實現關注點分離與可測試性。
- 上一篇文章: Perl DBI 核心技術深度解析:句柄、錯誤處理、佔位符與元數據
- 下一篇文章: 解決 Oracle 佔用 8080 端口衝突:禁用 XDB HTTP 服務
Copyright ©
程式碼之家 All Rights Reserved