2014-07-23 30 views
-1

在我的數據庫,我存儲這些值:
- Android GCM註冊ID
- IOS identifier for vendor
- 設備IMEI
- PHP uniqid消毒移動設備ID

好像他們有這些字符集:
GCM id:AZaz09-_
供應商標識符:AZ09-
IMEI:09
PHP uniqid:az09

我需要在保存到數據庫之前清理這些id。
所以我不知道如何消毒他們。
PHP的mysqli_real_escape_string是一個選項,但我更喜歡像preg_replace('/[^A-Za-z0-9\_]/', '', $deviceid)這樣的解決方案。但是目前的字符集在將來會改變嗎?我如何消毒他們,以便我可以覆蓋未來的變化?

回答

1

PHP的mysqli_real_escape_string是一個選項,但我更喜歡的preg_replace

停在那裏的解決方案。這個陳述,你的問題以及問題標籤很清楚你不明白轉義是什麼。不要直接回答你的問題,讓我試着解釋它。

mysqli_real_escape_string()爲SQL轉義字符串。所有這一切意味着您可以在SQL語句中透明地使用字符串。也就是說,的數據不會與命令混淆。當數據包含使數據和命令之間的分隔符不明確的字符時,會發生SQL注入。爲了避免SQL注入,數據必須與命令分離。一種方法是逃避它。

更好的方法是使用準備好的查詢。這將命令中的所有數據分開,這意味着數據可以是任何您想要的並且不需要轉義的數據。

另請參閱:https://stackoverflow.com/a/7810880/362536