當前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 南昌OA系統(tǒng) > 南昌網(wǎng)站建設公司
PHP中常犯的幾個MySQL錯誤
1、運用MyISAM而不是InnoDB
MySQL有很多數(shù)據(jù)庫引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL 默許運用的是MyISAM。但是,很多狀況下這都是一個很糟糕的選擇,除非你在創(chuàng)立一個十分簡單抑或?qū)嶒炐缘臄?shù)據(jù)庫。外鍵約束或者事務處置關于數(shù)據(jù)完好性 是十分重要的,但MyISAM都不支持這些。另外,當有一條記載在插入或者更新時,整個數(shù)據(jù)表都被鎖定了,當運用量增加的時分這會產(chǎn)生十分差的運轉效率。
結論很簡單:運用InnoDB。
2、運用PHP的mysql函數(shù)
PHP自產(chǎn)生之日就提供了MySQL庫函數(shù)(or near as makes no difference)。很多應用依然在運用相似mysql_connect、mysql_query、mysql_fetch_assoc等的函數(shù),雖然PHP手冊上說:
假如你在運用MySQL v4.1.3或者更新版本,激烈引薦運用您運用mysqli擴展。
mysqli(MySQL的增強版擴展)有以下幾個優(yōu)點:
可選的面向?qū)ο蠼涌?/p>
prepared表達式,這有利于阻止SQL注入攻擊,還能進步性能
支持更多的表達式和事務處置
另外,假如你想支持多種數(shù)據(jù)庫系統(tǒng),你還能夠思索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
美國、英國和澳大利亞的我們很少思索除英語之外的其他言語。我們很自得地完成了本人的“杰作”卻發(fā)現(xiàn)它們并不能在其他中央正常運轉。
UTF-8處理了很多國際化問題。固然在PHP v6.0之前它還不能很好地被支持,但這并不影響你把MySQL字符集設為UTF-8。
5、相關于SQL,偏愛PHP
假如你接觸MySQL不久,那么你會傾向于運用你曾經(jīng)控制的言語來處理問題,這樣會招致寫出一些冗余、低效率的代碼。比方,你不會運用MySQL自帶的AVG()函數(shù),卻會先對記載集中的值求和然后用PHP循環(huán)來計算均勻值。
此外,請留意PHP循環(huán)中的SQL查詢。通常來說,執(zhí)行一個查詢比在結果中迭代更有效率。
所以,在剖析數(shù)據(jù)的時分請應用數(shù)據(jù)庫系統(tǒng)的優(yōu)勢,懂一些SQL的學問將大有裨益。
6、沒有優(yōu)化數(shù)據(jù)庫查詢
99%的PHP性能問題都是由數(shù)據(jù)庫惹起的,僅僅一個糟糕的SQL查詢就能讓你的web應用徹底癱瘓。MySQL的EXPLAIN statement、Query Profiler,還有很多其他的工具將會協(xié)助你找出這些萬惡的SELECT。
7、不能正確運用數(shù)據(jù)類型
MySQL提供了諸如numeric、string和date等的數(shù)據(jù)類型。假如你想存儲一個時間,那么運用DATE或者DATETIME類型。假如這個時分用INTEGER或者STRING類型的話,那么將會使得SQL查詢十分復雜,前提是你能運用INTEGER或者STRING來定義那個類型。
很多人傾向于擅自自定義一些數(shù)據(jù)的格式,比方,運用string來存儲序列化的PHP對象。這樣的話數(shù)據(jù)庫管理起來可能會變得簡單些,但會使得MySQL成為一個糟糕的數(shù)據(jù)存儲而且之后很可能會惹起毛病。
8、在查詢中運用*
永遠不要運用*來返回一個數(shù)據(jù)表一切列的數(shù)據(jù)。這是懶散:你應該提取你需求的數(shù)據(jù)。就算你需求一切字段,你的數(shù)據(jù)表也不可防止的會產(chǎn)生變化。
9、不運用索引或者過度運用索引
普通性準繩是這樣的:select語句中的任何一個where子句表示的字段都應該運用索引。
舉 個例子,假定我們有一個user表,包括numeric ID(主鍵)和email address。登錄的時分,MySQL必需以一個email為根據(jù)查找正確的ID。假如運用了索引的話(這里指email),那么MySQL就可以運用 更快的搜索算法來定位email,以至能夠說是即時完成。否則,MySQL就只能次第地檢查每一條記載直到找到正確的email address。
有的人會在每個字段上都添加索引,遺憾的是,執(zhí)行了INSERT或者UPDATE之后這些索引都需求重重生成,這樣就會影響性能。所以,只在需求的時分添加索引。
10、遺忘備份!
固然比擬稀有,但是數(shù)據(jù)庫還是有解體的風險。硬盤有可能損壞,效勞器有可能解體,web主機提供商有可能會破產(chǎn)!喪失MySQL數(shù)據(jù)將會是災難性的,所以請確保你曾經(jīng)運用了自動備份或者曾經(jīng)復制到位。
- 1網(wǎng)絡營銷對一個公司未來發(fā)展的重要性
- 2微電影視頻網(wǎng)站解決方案
- 3ERP系統(tǒng)規(guī)劃都有哪些原則
- 4辦公桌的高度與辦公椅之間高度的的任意調(diào)整
- 5關于刀片服務器五大誤區(qū)解讀
- 6不能因為有了好用的熱水器就毫無節(jié)制的洗澡
- 7php6個你可能不知道的技巧
- 8SEO如何用適量的軟文提高網(wǎng)站排名?
- 9搶注域名要注意那些事項?
- 10義烏生產(chǎn)管理軟件組件化ERP系統(tǒng)四大架構
- 11好域名注冊技巧總結
- 12來了解下制作沙盤時影響沙盤表現(xiàn)效果的因素
- 13小區(qū)沙盤模型營造氛圍的重要性是什么
- 14使用納客連鎖會員管理系統(tǒng)遇到的問題
- 15建議新人在笑的時候下巴往下內(nèi)收一點
- 16Extjs學習及應用經(jīng)驗小結
- 17網(wǎng)站建設公司概括“幾大”實行心得
- 18淺析企業(yè)網(wǎng)站該如何巧妙的部署網(wǎng)站內(nèi)部鏈接
- 19別再把移動Web應用做得跟本地應用一樣
- 20晉城博遠建材網(wǎng)溫馨提示:謹慎駕駛安全出行
- 21ERP系統(tǒng)與SCM系統(tǒng)七大重疊功能
- 22使用納客會員管理系統(tǒng)遇到的問題(問答四)
- 23很多人習慣把西瓜切開后冷藏食用
- 24作為站長怎樣快速增加流量
- 25熱的食品要晾涼至室溫后再放入,以免損壞冰箱
- 26長尾關鍵字的流量秘密 挖掘獲取為初衷
- 27義烏外貿(mào)軟件分享ERP控制影響
- 28確定網(wǎng)站的關鍵詞的幾個重要因素
- 29八種賺不到錢的站長
- 30寶雞西安網(wǎng)站建設分享-如何做最有效果的外鏈
成都公司:成都市成華區(qū)建設南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓