mysqli_real_escape_string是一個內置的PHP函數,是較爲常用的防止SQL注入攻擊的方法之一。替換爲其他函數,要求具有將特殊字符進行轉義的功能,例如可以使用PDO中的PDO::quote函數和bindParam方法實現相同的效果。另外還可以使用addslashes函數進行轉義。
以下是使用PDO和addslashes函數的示例代碼:
使用PDO的示例代碼:
// 數據庫連接
$host = 'localhost';
$user = 'username';
$pass = 'password';
$dbName = 'database_name';
$dsn = "mysql:host=$host;dbname=$dbName;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
$pdo = new PDO($dsn, $user, $pass, $options);
// 防止SQL注入
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$username = $pdo->quote($username);
$password = $pdo->quote($password);
$sql = "SELECT * FROM users WHERE username=$username AND password=$password";
$stmt = $pdo->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 處理查詢結果
}在上述代碼中,我們使用PDO::quote函數將輸入的字符串中的特殊字符進行了轉義,可以安全地用於構造SQL語句。
使用addslashes的示例代碼:
// 數據庫連接
$host = 'localhost';
$user = 'username';
$pass = 'password';
$dbName = 'database_name';
$db = mysqli_connect($host, $user, $pass, $dbName);
if (!$db) {
die("無法連接到數據庫: " . mysqli_connect_error());
}
// 防止SQL注入
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = addslashes($_POST['username']);
$password = addslashes($_POST['password']);
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($db, $sql);
// 處理查詢結果
}在上述代碼中,我們使用了addslashes函數將輸入的字符串中的特殊字符進行了轉義,可以安全地用於構造SQL語句。需要注意的是,addslashes函數有一定的侷限性,在某些情況下可能無法完全避免SQL注入攻擊,因此不建議作爲防止SQL注入攻擊的唯一手段。