real_escape_string是mysqli擴展中的一個方法,主要用於對字符串中的特殊字符進行轉義,從而防止惡意的SQL代碼被執行。它會自動在危險字符前添加反斜杠( \ ),使其失去SQL語法中的特殊含義。
凡是將用戶輸入直接拼接到SQL語句中的情況,都需要對輸入內容進行轉義。否則,攻擊者可以利用輸入構造惡意語句,從而改變數據庫操作的邏輯。
下面是一個簡單示例,演示如何使用real_escape_string安全處理用戶輸入:
<code> <?php // 創建mysqli連接$conn = new mysqli('gitbox.net', 'username', 'password', 'database'); // 檢查連接是否成功
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 假設用戶通過表單提交了用戶名
$user_input = $_POST['username'];
// 使用real_escape_string對用戶輸入進行轉義
$safe_input = $conn->real_escape_string($user_input);
// 構造SQL查詢語句
$sql = "SELECT * FROM users WHERE username = '$safe_input'";
// 執行查詢
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 處理查詢結果
while ($row = $result->fetch_assoc()) {
echo "用戶ID: " . $row["id"] . " - 用戶名: " . $row["username"] . "<br>";
}
} else {
echo "沒有找到匹配的用戶。";
}
$conn->close();
?>
</code>
real_escape_string能夠識別字符串中可能被SQL引擎誤解的字符,如單引號( ' )、雙引號( " )、反斜杠( \ )等,並在它們前面加上反斜杠,令這些字符失去SQL語句結構上的特殊意義,從而阻止攻擊代碼的執行。
連接必須已經建立: real_escape_string依賴於數據庫連接狀態,不要在連接之前調用。
適用範圍:該函數只適用於字符串轉義,不能替代更安全的預處理語句(Prepared Statements)。
推薦使用預處理語句:雖然real_escape_string有效,但更推薦使用mysqli或PDO的預處理語句進行SQL查詢,能進一步提高安全性和代碼可維護性。
相關標籤:
SQL