2011-06-03 86 views
17

對於此查詢,是否需要使用mysql_real_escape_string使用預準備語句時,mysql_real_escape_string()是否必要?

任何改進或查詢都很好嗎?

$consulta = $_REQUEST["term"]."%"; 

($sql = $db->prepare('select location from location_job where location like ?')); 

$sql->bind_param('s', $consulta); 
$sql->execute(); 
$sql->bind_result($location); 

$data = array(); 

while ($sql->fetch()) { 
    $data[] = array('label' => $location); 
} 

的查詢速度在這種情況下非常重要。

+0

[PHP MySQLi準備的查詢綁定參數是否安全?](http://stackoverflow.com/questions/1561586/are-php-mysqli-prepared-queries-with-bound-parameters-secure) – outis 2012-07-19 10:04:46

回答

20

不,準備好的查詢(正確使用時)將確保數據妥善轉義以進行安全查詢。你恰當地使用它們,只需要改變一件小事。因爲你正在使用'?'佔位符,最好通過執行方法傳遞參數。

$sql->execute(array($consulta));

只是要小心,如果你是輸出到您的網頁,數據庫消毒並不意味着它會是安全的內HTML顯示,所以在其上運行的htmlspecialchars()爲好。

+0

所以,這樣的事情? $ SQL-> bind_param( 'S'); $ SQL->執行(陣列($ CONSULTA)); – anvd 2011-06-03 20:14:47

+0

Sorta,只是鬆開bind_param那裏,你應該很好。你所做的只是在你打電話的時候綁定你的參數 - > execute(); – SamT 2011-06-03 20:31:07

+0

有什麼優勢?謝謝 – anvd 2011-06-03 20:34:59

相關問題