我是新來的Android編程,我試圖創建一個需要持久遠程數據庫的應用程序。現在,來自Java和本地數據庫,我總是直接連接應用程序和數據庫,沒有中介。 我沒有看到這個解決方法的重點,有人可以明確這一點嗎?我試着在谷歌上搜索,但似乎每個人都認爲這是一個原則(或者我需要尋找更好的關鍵字)。Android,PHP和SQL,爲什麼和這兩者之間的中介?
回答
也許這會給你一些背景。我在Android和iPhone上構建了一款遊戲,並且我想要將高分存儲在遠程數據庫中。
安全是你做這件事的主要原因。您應該始終在服務器端進行數據驗證,而不是客戶端。通過這樣做,我的php腳本可以在對數據庫進行更改之前驗證輸入。另外,在您的apk文件中存儲數據庫憑證是不安全的。這帶來了一系列安全漏洞。將其保留在服務器端更安全。其次,通過使用單個PHP腳本,我只需要調試/管理驗證數據並在1個位置與我的數據庫交互的代碼... php文件。這爲我節省了大量時間,而不是更新iPhone和Android實例中的所有查詢和驗證條件。
我相信這種方法還有其他好處,但這些就是我這樣做的原因。
我現在能想到的最重要的論據是安全/查詢驗證。
你很可能想使用一個在線數據庫(可能是MySQL),因爲你想在它的應用程序的所有用戶之間存儲共享信息。本地數據庫和在線數據庫之間的主要區別在於,許多許多用戶都可以訪問它 - 無論是寫入和讀取訪問。
所以想象你有你的android應用程序,現在想在你的在線數據庫中保存一些用戶生成的數據。假設沒有PHP中介:應用程序直接將完成的MySQL請求發送到數據庫。
但是,如果有人查看您的應用程序的源代碼或使用任何其他方式來操縱該請求,會發生什麼情況?比方說,他改變從
SELECT * FROM user WHERE ID=9434896
到
SELECT * FROM user
查詢沒錯 - 他會從你的user
數據表中的所有信息,包括如密碼或E-mail地址的敏感數據。
什麼評估這些查詢並防止它們發生?
你的應用肯定沒有,因爲用戶可以很容易地操縱/更改應用。
你的MySQL數據庫也不檢查它們,因爲它總是假定查詢是開發者實際需要的。只要語法正確,它就會執行它。
而這正是你所需要的PHP中介:
您發送值到PHP文件(例如,check_login.php
接收值267432
(用戶ID)和hie8774h7dch37
(密碼)),PHP文件,然後檢查這些值實際上是一個用戶標識(例如「它們只是數字值嗎?」),然後從中建立一個MySQL查詢。
這樣用戶無法按自己的意願操作查詢。(他仍然可以發送錯誤的值;但根據情況,PHP腳本也可能檢查值是否合法)
這是一個抽象層。您不想將您的應用程序編碼到MySQL,然後發現您的後端正在轉移到MS-SQL。另外,您可以控制向用戶呈現信息的方式。如果他們有權訪問,他們可以閱讀所有內容。如果你有一個抽象層,那麼他們只能通過正確的渠道獲取信息。
- 1. 是什麼就是什麼這兩者之間的區別兩種功能
- 2. 什麼@android之間的區別:和android:
- 3. 任務和活動堆棧:兩者之間有什麼區別。
- 4. DOMContentLoaded vs window.onload。這兩者之間的真正區別是什麼?
- 5. SQL Server中這兩個索引之間的區別是什麼?
- 6. android:和android之間有什麼區別:
- 7. 包裝,橋樑和介體之間的區別是什麼?
- 8. 這和之間有什麼區別:and:this?
- 9. 「;」和「;」之間的區別是什麼?和T-SQL中的「GO」?
- 10. 這兩個張量之間有什麼區別,爲什麼?
- 11. Android SensorManager.getOrientation()返回介於-PI/2和PI/2之間的間距
- 12. 這兩行之間有什麼區別?
- 13. 這兩個....之間有什麼區別?
- 14. Jar簽名者和Apk簽名者之間有什麼區別?
- 15. Java中的流和讀者之間有什麼區別?
- 16. JMS中的MessageListener和消費者之間有什麼區別?
- 17. @property和@synthesize:爲什麼這兩個?
- 18. SQL中的兩次和日期之間選擇PHP
- 19. Python和GO之間的通信媒介?
- 20. SQL - JOIN和比較不同表中的兩行之間的區別是什麼?
- 21. 爲什麼PHP和Flash之間的「+」號消失?
- 22. 這個Integer和這個List之間的冒號是什麼?
- 23. 什麼之間的區別〜^和Git中
- 24. SQL SELECT兩者之間由日期
- 25. MIDP和JME(和Android)之間的關係是什麼?
- 26. 爲什麼這些SQL查詢之間的速度差異?
- 27. 旅行者和汽車之間有什麼緊密的聯繫?
- 28. 在Android中,MotionEvent中getAction()和getActionMasked()之間的區別是什麼?
- 29. 什麼是這兩個SQL查詢之間的區別 - SQL服務器
- 30. float:none和clear:兩者有什麼區別?
您需要一個響應android請求的後端服務器。而且他們通常使用'http'協議相互交談。關鍵詞查看'REST API','API'。 –