我做了分页,并且有过滤条件,有几种状态。问题在于: and status in ({$status}) 这段。select * from `news_main` where `input_uid`=8001 and status in ('0','1','3','5') order by `input_time` desc 和status in (0,1,3,5)查出来的结果是不一样的,前面的方式是正确的。但是我在分页 第几页的超链接的属性里要传递status得用 status=0,1,3,5 形式 而不能用status= '0','1','3','5' 形式 因为这样提交过去 sql部分语句会变成 status in (\'0\',\'1\',\'3\',\'5\')导致没有结果。请问有没有什么方法防止提交过去生成'\' 的,或者其它的思路? 谢了! 

解决方案 »

  1.   

    数据先加工啊$status='0,1,3,5';=>explode(',', $status) => array_unique排除重复,最后遍历一下,把条件组装好
      

  2.   

    ..... and status in (".stripslashes($status).")......
      

  3.   


    status='0,1,3,5';    //得到的$status = '\'' . implode('\',\'', explode(',', $status)) . '\'';   //开始处理status= '0','1','3','5';    //处理后的得到的
      

  4.   

    直接stripslashes,有安全隐患的,你的数据无论get,post,都是从客户端来的,一定处理,数据合法了,才能传给sql
      

  5.   


    $status='0,1,3,5';$status = '\'' . implode('\',\'', explode(',', $status)) . '\'';echo '<pre>';print_r($status);
      

  6.   

    解决了!
    //查询使用"'1','2','3'"形式
    $temp_status=explode(",",$status);
    //implode("','", $temp_status)后形如   0','1','3','5
    $status = "'". implode("','", $temp_status) . "'";
    //处理完后 如 '0','1','3','5'//----查询操作----
    //分页超链接传递参数使用"1,2,3"形式
    $status = str_replace("'","", $status);
    好像太麻烦了,还是在查询前加上$status=stripslashes($status);一行代码省事!也统一用"'1','2','3'"形式 了 
      

  7.   

     呵呵 因为$status不只是超链接传递,还有个选择条件用post方式提交过来的 多个checkbox供选择的。如果直接 $status = '\'' . implode('\',\'', explode(',', $status)) . '\'';很多情况是没有‘\’符号的,没有的话这样处理就会导致为空了。 就这样吧 爱怎么注入怎么注入吧