監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
南昌網(wǎng)站建設(shè)公司

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 南昌OA系統(tǒng) > 南昌網(wǎng)站建設(shè)公司

PHP中常犯的幾個MySQL錯誤

申請免費試用、咨詢電話:400-8352-114

 關(guān)于很多新手們來說,運用PHP能夠在短短幾個小時之內(nèi)輕松地寫出具有特定功用的代碼。但是,構(gòu)建一個穩(wěn)定牢靠的數(shù)據(jù)庫卻需求花上一些時日和相關(guān)技藝。下面羅列了南昌網(wǎng)站建設(shè)曾經(jīng)犯過的最嚴(yán)重的11個MySQL相關(guān)的錯誤(有些同樣也反映在其他言語/數(shù)據(jù)庫的運用上)。。。

  1、運用MyISAM而不是InnoDB

  MySQL有很多數(shù)據(jù)庫引擎,但是你最可能碰到的就是MyISAM和InnoDB。

  MySQL 默許運用的是MyISAM。但是,很多狀況下這都是一個很糟糕的選擇,除非你在創(chuàng)立一個十分簡單抑或?qū)嶒炐缘臄?shù)據(jù)庫。外鍵約束或者事務(wù)處置關(guān)于數(shù)據(jù)完好性 是十分重要的,但MyISAM都不支持這些。另外,當(dāng)有一條記載在插入或者更新時,整個數(shù)據(jù)表都被鎖定了,當(dāng)運用量增加的時分這會產(chǎn)生十分差的運轉(zhuǎn)效率。

  結(jié)論很簡單:運用InnoDB。

  2、運用PHP的mysql函數(shù)

  PHP自產(chǎn)生之日就提供了MySQL庫函數(shù)(or near as makes no difference)。很多應(yīng)用依然在運用相似mysql_connect、mysql_query、mysql_fetch_assoc等的函數(shù),雖然PHP手冊上說:

  假如你在運用MySQL v4.1.3或者更新版本,激烈引薦運用您運用mysqli擴(kuò)展。

  mysqli(MySQL的增強(qiáng)版擴(kuò)展)有以下幾個優(yōu)點:

  可選的面向?qū)ο蠼涌?/p>

  prepared表達(dá)式,這有利于阻止SQL注入攻擊,還能進(jìn)步性能

  支持更多的表達(dá)式和事務(wù)處置

  另外,假如你想支持多種數(shù)據(jù)庫系統(tǒng),你還能夠思索PDO。

  3、沒有處置用戶輸入

  這或者能夠這樣說#1:永遠(yuǎn)不要置信用戶的輸入。用效勞器端的PHP考證每個字符串,不要寄希望與JavaScript。最簡單的SQL注入攻擊會應(yīng)用如下的代碼:

  $username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';"; // run query...

  只需在username字段輸入“admin';--”,這樣就會被黑到,相應(yīng)的SQL語句如下:

  SELECT userid FROM usertable WHERE username='admin';

  狡猾的黑客能夠以admin登錄,他們不需求曉得密碼,由于密碼段被注釋掉了。

  4、沒有運用UTF-8

  美國、英國和澳大利亞的我們很少思索除英語之外的其他言語。我們很自得地完成了本人的“杰作”卻發(fā)現(xiàn)它們并不能在其他中央正常運轉(zhuǎn)。

  UTF-8處理了很多國際化問題。固然在PHP v6.0之前它還不能很好地被支持,但這并不影響你把MySQL字符集設(shè)為UTF-8。

  5、相關(guān)于SQL,偏愛PHP

  假如你接觸MySQL不久,那么你會傾向于運用你曾經(jīng)控制的言語來處理問題,這樣會招致寫出一些冗余、低效率的代碼。比方,你不會運用MySQL自帶的AVG()函數(shù),卻會先對記載集中的值求和然后用PHP循環(huán)來計算均勻值。

  此外,請留意PHP循環(huán)中的SQL查詢。通常來說,執(zhí)行一個查詢比在結(jié)果中迭代更有效率。

  所以,在剖析數(shù)據(jù)的時分請應(yīng)用數(shù)據(jù)庫系統(tǒng)的優(yōu)勢,懂一些SQL的學(xué)問將大有裨益。

  6、沒有優(yōu)化數(shù)據(jù)庫查詢

  99%的PHP性能問題都是由數(shù)據(jù)庫惹起的,僅僅一個糟糕的SQL查詢就能讓你的web應(yīng)用徹底癱瘓。MySQL的EXPLAIN statement、Query Profiler,還有很多其他的工具將會協(xié)助你找出這些萬惡的SELECT。

  7、不能正確運用數(shù)據(jù)類型

  MySQL提供了諸如numeric、string和date等的數(shù)據(jù)類型。假如你想存儲一個時間,那么運用DATE或者DATETIME類型。假如這個時分用INTEGER或者STRING類型的話,那么將會使得SQL查詢十分復(fù)雜,前提是你能運用INTEGER或者STRING來定義那個類型。

  很多人傾向于擅自自定義一些數(shù)據(jù)的格式,比方,運用string來存儲序列化的PHP對象。這樣的話數(shù)據(jù)庫管理起來可能會變得簡單些,但會使得MySQL成為一個糟糕的數(shù)據(jù)存儲而且之后很可能會惹起毛病。

  8、在查詢中運用*

  永遠(yuǎn)不要運用*來返回一個數(shù)據(jù)表一切列的數(shù)據(jù)。這是懶散:你應(yīng)該提取你需求的數(shù)據(jù)。就算你需求一切字段,你的數(shù)據(jù)表也不可防止的會產(chǎn)生變化。

  9、不運用索引或者過度運用索引

  普通性準(zhǔn)繩是這樣的:select語句中的任何一個where子句表示的字段都應(yīng)該運用索引。

  舉 個例子,假定我們有一個user表,包括numeric ID(主鍵)和email address。登錄的時分,MySQL必需以一個email為根據(jù)查找正確的ID。假如運用了索引的話(這里指email),那么MySQL就可以運用 更快的搜索算法來定位email,以至能夠說是即時完成。否則,MySQL就只能次第地檢查每一條記載直到找到正確的email address。

  有的人會在每個字段上都添加索引,遺憾的是,執(zhí)行了INSERT或者UPDATE之后這些索引都需求重重生成,這樣就會影響性能。所以,只在需求的時分添加索引。

  10、遺忘備份!

  固然比擬稀有,但是數(shù)據(jù)庫還是有解體的風(fēng)險。硬盤有可能損壞,效勞器有可能解體,web主機(jī)提供商有可能會破產(chǎn)!喪失MySQL數(shù)據(jù)將會是災(zāi)難性的,所以請確保你曾經(jīng)運用了自動備份或者曾經(jīng)復(fù)制到位。

發(fā)布:2007-03-31 14:48    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
南昌OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普南昌網(wǎng)站建設(shè)公司其他應(yīng)用

南昌OA軟件 南昌OA新聞動態(tài) 南昌OA信息化 南昌OA快博 南昌OA行業(yè)資訊 南昌軟件開發(fā)公司 南昌門禁系統(tǒng) 南昌物業(yè)管理軟件 南昌倉庫管理軟件 南昌餐飲管理軟件 南昌網(wǎng)站建設(shè)公司