對於大多數web開發應用來說,資料庫都是一個十分基礎性的部分。如果你在使用PHP,那麼你很可能也在使用MySQL—LAMP系列中舉足輕重的一份子。
對於許多新手來說,使用PHP可以在短短幾個小時之內輕鬆地寫出具有特定功能的程式碼。但是,建立一個穩定可靠的資料庫卻需要花一些時日和相關技能。以下列舉了我曾經犯過的最嚴重的11個MySQL相關的錯誤(有些同樣也反映在其他語言/資料庫的使用上)。
1.使用MyISAM而不是InnoDB
MySQL有很多資料庫引擎,但你最可能碰到的就是MyISAM和InnoDB。
MySQL預設使用的是MyISAM。但是,很多情況下這都是一個很糟糕的選擇,除非你在創建一個非常簡單抑或實驗性的資料庫。外鍵約束或事務處理對於資料完整性是非常重要的,但MyISAM都不支援這些。另外,當有一筆記錄在插入或更新時,整個資料表都被鎖定了,當使用量增加的時候這會產生非常差的運作效率。
結論很簡單:使用InnoDB。
2.使用PHP的mysql函數
PHP自產生之日就提供了MySQL函式(or near as makes no difference)。許多應用程式仍然在使用類似mysql_connect、mysql_query、mysql_fetch_assoc等的函數,儘管PHP手冊上說:
如果你在使用MySQL v4.1.3或更新版本,強烈建議使用您使用mysqli擴充。
mysqli(MySQL的加強版擴充)有以下幾個優點:
可選的物件導向介面
prepared表達式,這有利於阻止更多效能感和事務處理
另外,如果你想支援多種資料庫系統,你還可以考慮PDO。
3.沒有處理使用者輸入
這或可以這樣說#1:永遠不要相信使用者的輸入。用伺服器端的PHP驗證每個字串,不要寄希望與JavaScript。最簡單的SQL注入攻擊會利用如下的程式碼:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = “SELECT userid FROM usertable WHERE username=’$username’ AND password=’$password’;” // run query…
只要在username欄位輸入」admin';–”,這樣就會被駭到,對應的SQL語句如下:
SELECT userid FROM usertable WHERE username=' admin';
狡猾的駭客可以以admin登錄,他們不需要知道密碼,因為密碼段被註解掉了。
4.沒有使用UTF-8
美國、英國和澳洲的我們很少考慮英語以外的其他語言。我們很得意地完成了自己的」傑作」卻發現它們並不能在其他地方正常運作。
UTF-8解決了許多國際化問題。雖然在PHP v6.0之前它還不能很好地被支持,但這並不影響你把MySQL字元集設為UTF-8。
5.相對於SQL,偏愛PHP
如果你接觸MySQL不久,那麼你會偏向於使用你已經掌握的語言來解決問題,這樣會導致寫出一些冗餘、低效率的程式碼。例如,你不會使用MySQL自帶的AVG()函數,卻會先將記錄集中的值加總然後用PHP迴圈來計算平均值。
此外,請注意PHP循環中的SQL查詢。通常來說,執行一個查詢比在結果中迭代更有效率。
所以,在分析資料的時候請利用資料庫系統的優勢,懂一些SQL的知識將大有裨益。
6.沒有最佳化資料庫查詢
99%的PHP效能問題都是由資料庫引起的,僅僅一個糟糕的SQL查詢就能讓你的web應用徹底癱瘓。 MySQL的EXPLAIN statement、Query Profiler,還有很多其他的工具將會幫助你找出這些萬惡的SELECT。
7.無法正確使用資料型別
MySQL提供了諸如numeric、string和date等的資料型態。如果你想儲存一個時間,那麼使用DATE或DATETIME類型。如果這個時候用INTEGER或STRING類型的話,那麼將會使得SQL查詢非常複雜,前提是你可以使用INTEGER或STRING來定義那個型別。
很多人傾向於擅自自訂一些資料的格式,例如,使用string來儲存序列化的PHP物件。這樣的話資料庫管理起來可能會變得簡單些,但會讓MySQL成為一個糟糕的資料儲存而且之後很可能會造成故障。
8.在查詢中使用*
永遠不要使用*來傳回一個資料表所有欄位的資料。這是懶惰:你應該提取你需要的資料。就算你需要所有字段,你的資料表也不可避免的會產生變化。
9.不使用索引或過度使用索引
一般性原則是這樣的:select語句中的任何一個wher子句表示的欄位都應該使用索引。
舉個例子,假設我們有一個user表,包含numeric ID(主鍵)和email address。登入的時候,MySQL必須以一個email為依據找出正確的ID。如果使用了索引的話(這裡指email),那麼MySQL就能夠使用更快的搜尋演算法來定位email,甚至可以說是即時實作。否則,MySQL就只能順序地檢查每一筆記錄直到找到正確的email address。
有的人會在每個字段上都添加索引,遺憾的是,執行了INSERT或者UPDATE之後這些索引都需要重新生成,這樣就會影響性能。所以,只在需要的時候加上索引
10.忘記備份
雖然比較罕見,但是資料庫還是有崩潰的危險。硬碟有可能損壞,伺服器有可能崩潰,web主機提供者有可能會破產!遺失MySQL資料將會是災難性的,所以請確保你已經使用了自動備份或已經複製到位。
11.Bonus mistake-不考慮使用其他資料庫
對於PHP開發人員來說,MySQL可能是使用最廣泛的資料庫系統,但並不是唯一的選擇。 PostgreSQL和Firebird是最強而有力的競爭者:這個兩者都是開源的,而且都沒有被公司收購。微軟提供了sql server Express,甲骨文提供了10g Express,這兩者都是企業級資料庫的免費版本。有時候,對於一個較小的web應用或嵌入式應用,SQLite也不失為一個可行的替代方案。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具