從mysql_*過渡到PDO的過程中,你可能會遇到缺少與mysql_real_escape_string直接等價的東西的困境。
沒有直接等價物
從技術上來說,有 PDO::quote(),但它的使用是有限的。真正的解決方案在於正確實現準備好的語句。
準備好的語句防止注入
PDO 與準備好的語句一起使用時,本質上可以防止 MySQL 注入,而無需需要額外的轉義。預準備語句將輸入參數綁定到佔位符,防止惡意輸入被解釋為 SQL 指令。
範例:在PDO 中使用預先準備語句
以下程式碼示範了安全資料庫使用準備好的語句進行查詢:
false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
if ($_POST && isset($_POST['color'])) {
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
$stmt->execute(array($_POST['color']));
$cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
var_dump($cars);
}
?>
準備語句的好處
其他注意事項
結論
PDO 中的準備語句為資料庫查詢提供了強大且安全的機制,而不需要像 mysql_real_escape_string 這樣的函數。透過採用這種方法,您可以有效防止 SQL 注入並保持資料的完整性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3