$con = mysqli_connect("localhost","user","pass","db");
$safe = mysqli_real_escape_string($con, $_POST['user']);
$sql = "SELECT * FROM users WHERE user='$safe'";
優點:考慮連線字符集、專為 MySQL 設計、可安全用於 mysqli_query()。
$str = "Is your name O'reilly?";
echo addslashes($str); // Is your name O\'reilly?
注意:若 magic_quotes_gpc=On 已自動轉義,再呼叫會雙重轉義。需先檢查:
if (!get_magic_quotes_gpc()) $str = addslashes($str);
echo stripslashes("Who\'s John Adams?"); // Who's John Adams?
$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";
// 無過濾時 SQL 變為:WHERE user='john' AND password='' OR ''=''
// 任意密碼皆可登入
請直接使用 PDO 或 MySQLi 預處理語句,完全避免手動轉義:
$stmt = $pdo->prepare("SELECT * FROM users WHERE user=? AND pwd=?");
$stmt->execute([$_POST['user'], $_POST['pwd']]);