为什么mysql real_escape_string vsprintf不起作用

时间:2012-08-02 16:31:31

标签: php mysql

现在我已将我的查询转换为PDO格式。但是我必须在下次使用旧格式实现查询。代码是这样的:

function mysql_Select($sql) {
    $data=array();
    $params=func_get_args();
    $s=PreparaSQL($sql, $params);
    $res = mysql_query($s);
    if ($res && mysql_num_rows($res)){
        while( $dt = mysql_fetch_object($res)){
            $data[]=$dt;
        }
        return $data;
    }
}

function PreparaSQL($sql, $array_param){
   unset($array_param[0]);
   foreach ($array_param as $k => $v){
      $array_param[$k]=mysql_real_escape_string($v);       }
  return vsprintf( str_replace("params","%s",$sql), $array_param );  
}

执行函数是:

$data=mysql_Select('SELECT concat(id," | ",wh2) as label,Id as kode,wh2 as nama,wh2 as value FROM wh011 where wh2 like %s',$_GET['where']);
echo json_encode($data);
flush();

输出有null值的错误。我认为麻烦在于这段代码:

return vsprintf( str_replace("params","%s",$sql), $array_param ); 

我真的不知道错误点在哪里。 谢谢你的回答。

2 个答案:

答案 0 :(得分:0)

在建立连接之前,不能使用mysql_real_escape_string()。您可能必须编写自己的转义方法。有关详情,请参阅备注部分here

答案 1 :(得分:0)

我认为你的参数1和2错误。

尝试:

  

$ sql =“这是我的字符串params你找到了吗?\ n”;

     

echo vsprintf(str_replace(“params”,“%s”,$ sql),“BOO!”);

输出

 here is my string BOO! did you find it?

我建议不要做str_replace ......?