不,这完全是错误的,我不明白你打算做什么。
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