我应该使用mysql_real_escape_string转义预期的整数值,还是只使用(int)$ expectedinteger

Uğu*_*han 7 php mysql casting sql-injection escaping

使用cast(int)而不是转义是否安全?

class opinion
{
   function loadbyopinionid($opinionid){
      $opinionid=(int)$opinionid;
      mysql_query("select * from fe_opinion where opinionid=$opinionid");
      //more code 
   }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 13

mysql_real_scape_string适用于STRINGS.它不会使整数'安全'使用.例如

$safe = mysql_real_escape_string($_GET['page']);
Run Code Online (Sandbox Code Playgroud)

会不会在哪里

$_GET['page'] = "0 = 0";
Run Code Online (Sandbox Code Playgroud)

因为那里没有SQL元字符.你的查询最终会像

SELECT ... WHERE somefield = 0 = 0
Run Code Online (Sandbox Code Playgroud)

但是,执行intval()会将其转换0=0为plain 0.

  • 究竟.`(int)$ value`是安全的,但必须记住,有副作用,如`(int)"5abc"=== 5`.所以应该验证,给定的字符串是*只是一个数字,例如使用`ctype_digit()`. (2认同)