1
A
回答
1
你必須逃避所有的用戶輸入,甚至包括諸如服務器變量之類的東西。如果一個值從數據庫中被提取出來,並且沒有被用戶輸入以任何方式觸及,那麼當在查詢中重用時,它不需要被轉義,除非它包含字符串連接傳入時會中斷該查詢的字符。
例如,我拉的名字O'Brien
從數據庫到一個PHP變量$name
,然後在另一份聲明試圖將它放回這樣的:
$query = "INSERT INTO table (id, name) VALUES (123, '$name');";
這將打破查詢,因爲我有未能擺脫O'Brien的'
。
1
您不必擔心這一點。如果數據庫中的值具有任何保留的名稱,則不會影響,因爲它不會被解釋。
你應該擔心sql注入,並確保你運行插入,刪除,選擇或更新來自用戶輸入數據的任何語句轉義單引號和其他字符。即使是普通用戶 - 沒有不良意圖 - 會使用單引號會導致錯誤。
如果用戶使用一個用戶名,如:
joe'; drop table users; --
你可能會遇到麻煩。
希望這會有所幫助!
+2
必填參考:http://xkcd.com/327/ –
+1
當然..這應該是一個標準答案! –
相關問題
- 1. 當你絕對必須手動逃避SQL CakePHP中3.4.7
- 2. 當在SQL必須指定源表中的變量在MySQL
- 3. 做一個變量是必需的 - 逃避NullReferenceException?
- 4. 當我必須阻止我的演員?
- 5. 必須聲明標量變量,爲什麼當它的Param?
- 6. 爲什麼我必須逃脫最終]
- 7. 當我觸摸屏幕我的精靈必須改變
- 8. 當在sql server中使用時間變量時,必須聲明標量變量
- 9. 當我必須使用@section腳本?
- 10. 當「必須」我使用asp.net CreateChildControls()?
- 11. 當我必須做setNeedDisplay或setNeedLayout?
- 12. 接收「的表達被分配必須是常量」當它是
- 13. MSG 137:當聲明變量DECLARE/SET/QUERY必須同時運行
- 14. 爲什麼我必須使用變量而不是「0」?
- 15. PHP回聲而不必逃避引號
- 16. 返回一個不可變集合當物品必須是可變的最初
- 17. 爲什麼我必須轉換變量?
- 18. 我必須釋放這個變量嗎?
- 19. 左邊必須是一個變量
- 20. 爲什麼UISearchDisplayController必須是類變量?
- 21. 作業的左側必須是變量
- 22. 局部變量必須是最終
- 23. 作業的左側必須是變量
- 24. 左側必須是變量或屬性
- 25. 作業的左側必須是變量
- 26. 變量必須是原始的
- 27. 當已經檢索到實例變量時,是否必須使用objectWithID?
- 28. 當使用cakephp habtm時,我是否也必須在MySql中創建關係?
- 29. 必須聲明標量變量「@Hlava」必須聲明標量變量「@Vaha」
- 30. ODBC必須聲明標量變量
你的意思是他們是或不是用戶輸入? –