2012-08-02 54 views
0

現在我已將我的查詢轉換爲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); 

我真的不知道錯誤點在哪裏。 謝謝你的回答。

+1

請不要使用'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

+1

我意識到你正在轉換到PDO,但是我覺得只要使用'mysql_ *'funcs就會發布該評論^ – orourkek 2012-08-02 16:34:43

+0

由於你使用的是函數,所以你可以在函數內自然地重構你的代碼。只要輸入的格式相同,結果以相同的格式返回,您就不需要更改任何其他代碼。 – 2012-08-02 17:34:09

回答

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函數...?

+0

謝謝。我已經將我的代碼更改爲您的響應,如下所示:return vsprintf(str_replace(「%s」,「params」,$ sql),$ array_param);但仍然有空回報。 – 2012-08-02 17:19:33

+0

嗯,我想這或許是問題出在這裏的「邏輯」。 vsprintf需要在那裏有%s嗎?並且你傳遞了%s,但用vsprintf失敗的單詞「params」替換它。看看我更新的答案,看看是否有幫助。 – FreudianSlip 2012-08-02 17:29:59

+0

是的...非常感謝。嘗試使用以下代碼:echo vsprintf(str_replace(「params」,「%s」,'SELECT concat(id,「|」,wh2)as label,Id as kode,wh2 as nama,wh2 as value FROM wh011 where wh2 like %S '),' 「%AAA」');並且查詢字符串是正確的:SELECT concat(id,「|」,wh2)作爲標籤,Id作爲kode,wh2作爲nama,wh2作爲值FROM wh011,其中wh2像「%aaa」。 – 2012-08-02 17:53:10

0

連接建立之前,您不能使用mysql_real_escape_string()。您可能必須編寫自己的轉義方法。有關更多詳細信息,請參見備註部分here

+0

我認爲mysql_real_escape_string已經在我的連接中。因爲如果我用這個代碼執行,在mysql_Select函數和返回value.this函數之前執行的連接是代碼:$ data = mysql_Select('SELECT concat(id,「|」,wh2)作爲標籤,Id作爲kode,wh2 as nama,wh2 as value FROM wh011');這是結果:[{「label」:「1 | Celullar」,「kode」:「1」,「nama」:「Celullar」,「value」:「Celullar」}] – 2012-08-02 17:30:45

相關問題