用戶輸入未驗證直接拼接 SQL:$name = "Qadir'; DELETE FROM users;"; 導致執行 SELECT * FROM users WHERE name='Qadir'; DELETE FROM users;。
if (preg_match('/^\\w{8,20}$/', $_GET['username'], $matches)) {
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = ?');
$stmt->execute([$matches[0]]);
}
if (get_magic_quotes_gpc()) $name = stripslashes($name);
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");
⚠️ mysql_* 函數已棄用,**強烈建議遷移至 PDO / mysqli 預處理語句**。
用戶輸入含 %、_ 會改變匹配語義,需雙重轉義:
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \\%something\\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
sql_mode=STRICT_ALL_TABLES 拒絕異常數據log_statement = all(PostgreSQL)或通用日誌