當客戶端請求PHP文件時,服務器會依次完成解析、執行和輸出三個主要步驟。
服務器首先解析PHP代碼,將腳本轉換為可執行指令。 PHP文件以<?php開頭, ?>結尾。
解析完成後,服務器執行PHP腳本,處理變量、函數和邏輯。執行時,服務器會區分腳本內的代碼和服務器環境的變量與函數,確保正確運行。
代碼執行結束後,服務器將結果返回給客戶端,通常為HTML、JSON、XML或圖片等格式。
在PHP中,連接MySQL數據庫通常使用mysqli擴展,示例如下:
$username = "使用者名稱";
$password = "密碼";
$hostname = "主機名";
$database = "數據庫名";
// 創建連接對象
$conn = new mysqli($hostname, $username, $password, $database);
// 檢查連接是否成功
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
echo "連接成功";
以上代碼通過傳入主機名、用戶名、密碼及數據庫名建立連接,連接成功後即可通過$conn執行SQL語句。
下面是使用mysqli對象執行簡單查詢的代碼:
$sql = "SELECT * FROM 表名";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 輸出每條記錄
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}
} else {
echo "沒有查詢結果";
}
$conn->close();
代碼執行查詢後遍歷結果,逐條輸出數據,最後關閉數據庫連接。
SQL注入是數據庫安全的常見威脅。有效防護措施包括:
下面展示使用PDO防注入的代碼示例:
$sql = "SELECT * FROM 表名 WHERE name = :name";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':name', $name);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
$conn->close();
通過prepare方法預編譯SQL,bindValue綁定參數,可以有效避免惡意SQL注入,保障數據安全。