成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
當(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,偏愛(ài)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《PHP項(xiàng)目跟蹤管理系統(tǒng)操作流程指南:高效管理項(xiàng)目進(jìn)度與團(tuán)隊(duì)協(xié)作的實(shí)用手冊(cè)》
- 2使用ThinkPHP框架構(gòu)建高效學(xué)生管理系統(tǒng)的獨(dú)特優(yōu)勢(shì)與實(shí)際應(yīng)用價(jià)值
- 3試用PHP軟件項(xiàng)目管理工具:優(yōu)化項(xiàng)目流程,提高團(tuán)隊(duì)協(xié)作效率的絕佳選擇
- 4php生產(chǎn)制造物料管理系統(tǒng)源碼含詳細(xì)注釋與高效功能示例
- 5php采購(gòu)倉(cāng)庫(kù)管理系統(tǒng)助力企業(yè)高效庫(kù)存管控與采購(gòu)流程優(yōu)化
- 6PHP打造超實(shí)用商品庫(kù)存管理系統(tǒng),高效管控庫(kù)存不是夢(mèng)!
- 7php庫(kù)存管理系統(tǒng)論文:實(shí)現(xiàn)高效庫(kù)存管控的技術(shù)方案剖析
- 8php庫(kù)存管理系統(tǒng)源碼含詳細(xì)注釋與功能擴(kuò)展教程
- 9php庫(kù)存管理系統(tǒng)教程:從搭建到高效應(yīng)用全

