2010-01-05 194 views

回答

5

正是出於這種情況下的安全,但更普遍的做法,我寧願結合使用mysql_real_escape_string型鑄造:

$query = "SELECT * FROM products WHERE product_id='" . (int)mysql_real_escape_string($_GET['id']) . "'"; 

在最壞的情況下,這將導致0和意志也逃脫所有惡意輸入。 mysql_real_escape_string可用於各種數據,以確保查詢的安全性,從而使其成爲所有逃生/衛生功能中最通用的。

沒有去儘可能使用準備好的語句,你可以用sprintf來創建你的SQL和自動處理的類型轉換:

$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", mysql_real_escape_string($_GET['id'])); 

請參閱從PHP手冊sprintf條目的語法。

,如果你使用array_map逃避所有$_GET$_POST變量變得更加簡單,那麼你可以將它們用作是:

$_GET = array_map('mysql_real_escape_string', $_GET); 
$_POST = array_map('mysql_real_escape_string', $_POST); 

$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", $_GET['id']); 
+0

+1,也有更好的支持,因爲filter_var只適用於PHP 5.2或更高版本。 – 2010-01-05 09:51:27

+0

謝謝你的徹底解答。 – Evenz495 2010-01-05 10:37:18

1

我通常只使用intval

$product_id = intval($_GET['id']); 
$query = "SELECT * FROM products WHERE product_id='" . $product_id . "'"; 
0

可能這對你有用......!

$query=query("SELECT * FROM products WHERE product_id= ". escape_string($_GET['id']) . " "); 
+1

儘管此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – 2017-02-21 07:05:27