狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

PHP程序員最常犯的11個MySQL錯誤

admin
2014年9月5日 21:2 本文熱度 3749
  對于大多數 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 表達式,這有利于阻止 SQL 注入攻擊,還能提高性能
  支持更多的表達式和事務處理
  另外,如果你想支持多種數據庫系統,你還可以考慮 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 語句中的任何一個 where 子句表示的字段都應該使用索引。
  舉個例子,假設我們有一個 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 也不失為一個可行的替代方案。
  看完這篇文章后,你的反應是:
  請關注我們:
原文地址:http://iphone.myzaker.com/l.php?l=540926691bc8e053028b458d

該文章在 2014/9/5 21:02:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved