2012-10-14 83 views
1

只是想知道,我的應用程序需要儘可能快,變量已被轉換爲int,所以我不想逃避字符串,如果它可以避免。它是安全的投資int而不是mysql_real_escape_string

例子是:

$var1 = (int)$_POST['number1'] //User input; 
mysql_query("INSERT INTO ... $var1 .."); 

的是,在所有情況下的安全,或者我應該也mysql_real_escape_string $var1藏漢?

有時候我也是md5()而不是轉義他們,但我想沒關係。

+0

我只想知道安全性,而不是太擔心優先方法和編碼標準。 – Drahcir

+0

更好的是,更新自己到21世紀,並使用mysqli或pdo ...鑄造到int或轉義字符串會比你的db查詢快得多,所以如果你需要速度的db查詢的焦點 - 並記住準備好的語句被緩存以加快執行 –

+0

@MarkBaker:是的,謝謝我已經。這僅僅是一個例子,我的意思是與其他任何逃避方法相比。 – Drahcir

回答

5

是的,這將是安全的,需要注意的是,任何非有效整數值都將被轉換爲0,這可能會導致副作用。

正如minitech說的那樣,使用準備好的語句確實應該是一條路,因爲您不必再​​爲此擔心。

但是,更重要的是,績效並不是真正的問題,也不值得考慮。無論你是逃避還是不逃避一個字符串,都不會影響你的應用程序的性能(至少不是如果它不是兆字節大)。不成熟的優化通常是浪費時間 - 這種「優化」只會使代碼更難以閱讀和理解,從長遠來看這更爲重要。

+1

感謝您分享術語「過早優化」+1 – Drahcir

7

是的,在任何情況下都是安全的,儘管您可能想要檢查$_POST['number1']是否也是有效整數,以避免發出通知。

而且,即使你說

我只是想知道safeness,不用太擔心者優先[原文]方法和編碼標準。

我仍然會建議您使用預準備語句。

2

這是安全的,但請記住,任何字符串將被轉換爲0,不爲空或類似的東西。

3

正如minitech所說,最好的做法是確保您檢查它是一個整數。儘管使用準備好的語句確實會更安全,但我最近接受了PDO並且不會返回。

相關問題