一张表  id字段为主键 自增如果要删除某条数据那么"delete from test where id=".$_POST['id']问题就是有没有可能这样是不安全的"delete from test where id=".$_POST['id']$_POST['id']   =  2 or 1=1  之类的情况会产生这种情况吗,导致全部删除

解决方案 »

  1.   

    有啊,所以一般对数值类型也加引号
    "delete from test where id='$_POST[id]'"
      

  2.   


    对,我试了,是全部删除,但是有没有可能加了引号还不安全呢??我看见有个函数是mysql_real_escape_string
      

  3.   

     有可能。这就是常常说的防sql注入。转义特殊字符。
      

  4.   

    方法一:在php.ini中设置:magic_quotes_gpc = Off 方法二: $str=stripcslashes($str) 
      

  5.   

    一般如果是数值的,基本是整型,都会intval一下
      

  6.   

    那么再问问平时我们插入数据是 "insert into test(a,b,c) values('".$a."','".$b."','".$c."')";有这么多双引号,单引号,,如果字段一朵就晕了有没有可能"insert into test(a,b,c) values(".$a.",".$b.",".$c.")"这样就清晰多了,,如何处理
      

  7.   


    "insert into test(a,b,c) values('{$a}','{$b}','{$c}')"一般这种 稍微长点的 一律使用数组循环组成SQL.当然你想练习打字也可以
      

  8.   

    "insert into test(a,b,c) values('$a','$b','$c')";
    这样不是很清晰?
      

  9.   


    话说那个单引号下  php变量不是不解析的吗?
      

  10.   

    这就是整形注入。不管查询int还是string记得加上引号, '$val'