不,這完全是錯誤的,我不明白你打算做什麼。
mysql_real_escape_string
的目的是爲了避免SQL injection,這是網站最大的安全風險之一。它會阻止您的用戶提供以惡意方式操縱SQL的輸入。例如:
$sql = "SELECT FROM users WHERE username = '" . $_GET['username'] . "'";
如果我把lonesomeday' or 'a' = 'a
到$_GET['username']
,查詢變得
SELECT FROM users WHERE username = 'lonesomeday' or 'a' = 'a'
,顯然任意的SQL然後可以執行。 mysql_real_escape_string
轉義不安全字符(例如該例中的'
),以便它們不能以這種方式使用。
$sql = "SELECT FROM users WHERE username = '" . mysql_real_escape_string($_GET['username']) . "'";
// SELECT FROM users WHERE username = 'lonesomeday\' or \'a\' = \'a'
引號現在已被轉義。所以查詢不能被用來做惡事。
綜上所述,在這種情況下,intval
可以滿足您的所有需求。它還確保沒有任何非整數可以在$id
之內,所以您的代碼在SQL注入中是安全的。
忘記mysql_real_escape_string並只使用參數化查詢。 – Kibbee 2011-05-12 23:38:44