我正在使用 php 并在 mysql 服务器上运行 sql 查询。为了防止 sql 注入,我使用 mysql_real_escape_string。
我还以下列方式使用 (int) 进行数字转换:
$desired_age = 12;
$query = "select id from users where (age > ".(int)$desired_age.")";
$result = mysql_query($query);
那项工作。
但是,当变量包含较大的数字时,转换它们会失败,因为它们大于 int。
$user_id = 5633847511239487;
$query = "select age from users where (id = ".(int)$user_id.")";
$result = mysql_query($query);
// this will not produce the desired result,
// since the user_id is actually being cast to int
除了使用 mysql_real_escape_string 之外,还有其他方法可以转换大数(如 BIGINT),什么时候可以防止 sql 注入?