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