現在我已將我的查詢轉換爲PDO格式。但是我必須在下一次使用舊格式實現查詢。該代碼是這樣的:爲什麼mysql real_escape_string vsprintf不起作用
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);
我真的不知道錯誤點在哪裏。 謝謝你的回答。
請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。查看[*紅色框*](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 – orourkek 2012-08-02 16:33:36
我意識到你正在轉換到PDO,但是我覺得只要使用'mysql_ *'funcs就會發布該評論^ – orourkek 2012-08-02 16:34:43
由於你使用的是函數,所以你可以在函數內自然地重構你的代碼。只要輸入的格式相同,結果以相同的格式返回,您就不需要更改任何其他代碼。 – 2012-08-02 17:34:09