最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP學(xué)習(xí)散記 2012_01_07(MySQL)

 更新時(shí)間:2012年01月08日 22:43:22   作者:  
數(shù)據(jù)庫是Web大多數(shù)應(yīng)用開發(fā)的基礎(chǔ)。如果你是用PHP,那么大多數(shù)據(jù)庫用的是MYSQL也是LAMP架構(gòu)的重要部分
PHP看起來很簡(jiǎn)單,一個(gè)初學(xué)者也可以幾個(gè)小時(shí)內(nèi)就能開始寫函數(shù)了。但是建立一個(gè)穩(wěn)定、可靠的數(shù)據(jù)庫確需要時(shí)間和經(jīng)驗(yàn)。下面就是一些這樣的經(jīng)驗(yàn),不僅僅是MYSQL,其他數(shù)據(jù)庫也一樣可以參考。

1.使用MyISAM而不是InnoDB

MySQL有很多的數(shù)據(jù)庫引擎,單一般也就用MyISAM和InnoDB。

MyISAM 是默認(rèn)使用的。但是除非你是建立一個(gè)非常簡(jiǎn)單的數(shù)據(jù)庫或者只是實(shí)驗(yàn)性的,那么到大多數(shù)時(shí)候這個(gè)選擇是錯(cuò)誤的。MyISAM不支持外鍵的約束,這是保證數(shù)據(jù)完整性的精華所在啊。另外,MyISAM會(huì)在添加或者更新數(shù)據(jù)的時(shí)候?qū)⒄麄€(gè)表鎖住,這在以后的擴(kuò)展性能上會(huì)有很大的問題。

解決辦法很簡(jiǎn)單:使用InnoDB。

2.使用PHP的mysql方法

PHP從一開始就提供了MySQL的函數(shù)庫。很多程序都依賴于mysql_connect、mysql_query、mysql_fetch_assoc等等,但是PHP手冊(cè)中建議:

如果你使用的MySQL版本在4.1.3之后,那么強(qiáng)烈建議使用mysqli擴(kuò)展。

mysqli,或者說MySQL的高級(jí)擴(kuò)展,有一些優(yōu)點(diǎn):

有面向?qū)ο蟮慕涌?

prepared statements(預(yù)處理語句,可以有效防止SQL-注入攻擊,還能提高性能)

支持多種語句和事務(wù)

另外,如果你想支持多數(shù)據(jù)庫那么應(yīng)該考慮一下PDO。

3.不過濾用戶輸入

應(yīng)該是:永遠(yuǎn)別相信用戶的輸入。用后端的PHP來校驗(yàn)過濾每一條輸入的信息,不要相信Javascript。像下面這樣的SQL語句很容易就會(huì)被攻擊:

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

這樣的代碼,如果用戶輸入”admin';”那么,就相當(dāng)于下面這條了:

SELECT userid FROM usertable WHERE username='admin';

這樣入侵者就能不輸入密碼,就通過admin身份登錄了。

4.不使用UTF-8

那些英美國(guó)家的用戶,很少考慮語言的問題,這樣就造成很多產(chǎn)品就不能在其他地方通用。還有一些GBK編碼的,也會(huì)有很多的麻煩。

UTF-8解決了很多國(guó)際化的問題。雖然PHP6才能比較完美的解決這個(gè)問題,但是也不妨礙你將MySQL的字符集設(shè)置為UTF-8。

5.該用SQL的地方使用PHP

如果你剛接觸MySQL,有時(shí)候解決問題的時(shí)候可能會(huì)先考慮使用你熟悉的語言來解決。這樣就可能造成一些浪費(fèi)和性能比較差的情況。比如:計(jì)算平均值的時(shí)候不適用MySQL原生的AVG()方法,而是用PHP將所有值循環(huán)一遍然后累加計(jì)算平均值。

另外還要注意SQL查詢中的PHP循環(huán)。通常,在取得所有結(jié)果之后再用PHP來循環(huán)的效率更高。

一般在處理大量數(shù)據(jù)的時(shí)候使用強(qiáng)有力的數(shù)據(jù)庫方法,更能提高效率。

6.不優(yōu)化查詢

99%的PHP性能問題都是數(shù)據(jù)庫造成的,一條糟糕的SQL語句可能讓你的整個(gè)程序都非常慢。MySQL的EXPLAIN statement,Query Profiler,many other tools的這些工具可以幫你找出那些調(diào)皮的SELECT。

7.使用錯(cuò)誤的數(shù)據(jù)類型

MySQL提供一系列數(shù)字、字符串、時(shí)間等的數(shù)據(jù)類型。如果你想存儲(chǔ)日期,那么就是用DATE或者DATETIME類型,使用整形或者字符串會(huì)讓事情更加復(fù)雜。

有時(shí)候你想用自己定義的數(shù)據(jù)類型,例如,使用字符串存儲(chǔ)序列化的PHP對(duì)象。數(shù)據(jù)庫的添加可能很容易,但是這樣的話,MySQL就會(huì)變得很笨重,而且以后可能導(dǎo)致一些問題。

8.在SELECT查詢中使用*

不要使用*在表中返回所有的字段,這會(huì)非常的慢。你只需要取出你需要的數(shù)據(jù)字段。如果你需要取出所有的字段,那么可能你的表需要更改了。

9.索引不足或者過度索引

一般來說,應(yīng)該索引出現(xiàn)在SELECT語句中WHERE后面所有的字段。

例如,假如我們的用戶表有一個(gè)數(shù)字的ID(主鍵)和email地址。登錄之后,MySQL應(yīng)該通過email找到相應(yīng)的ID。通過索引,MySQL可以通過搜索算法很快的定位email。如果沒有索引,MySQL就需要檢查每一項(xiàng)記錄直到找到。

這樣的話,你可能想給每一個(gè)字段都添加索引,但是這樣做的后果就是在你更新或者添加的時(shí)候,索引就會(huì)重新做一遍,當(dāng)數(shù)據(jù)量大的時(shí)候,就會(huì)有性能問題。所以,只在需要的字段做索引。

10.不備份

也許不常發(fā)生,但是數(shù)據(jù)庫損毀,硬盤壞了、服務(wù)停止等等,這些都會(huì)對(duì)數(shù)據(jù)造成災(zāi)難性的破壞。所以你一定要確保自動(dòng)備份數(shù)據(jù)或者保存副本。

11.另外:不考慮其他數(shù)據(jù)庫

MySQL可能是PHP用的最多的數(shù)據(jù)庫了,但是也不是唯一的選擇。 PostgreSQL和Firebird也是競(jìng)爭(zhēng)者,他們都開源,而且不被某些公司所控制。微軟提供SQL Server Express,Oracle有10g Express,這些企業(yè)級(jí)的也有免費(fèi)版。SQLite對(duì)于一些小型的或者嵌入式應(yīng)用來說也是不錯(cuò)的選擇。

相關(guān)文章

  • MySQL全面瓦解之查詢的過濾條件詳解

    MySQL全面瓦解之查詢的過濾條件詳解

    這篇文章主要給打大家介紹了關(guān)于MySQL全面瓦解之查詢的過濾條件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL死鎖日志的實(shí)例分析技巧總結(jié)

    MySQL死鎖日志的實(shí)例分析技巧總結(jié)

    MySQL死鎖是線上經(jīng)常遇到的現(xiàn)象,MySQL死鎖日志分析方法有助于研發(fā)快速提取信息,提高分析效率,通過了解死鎖觸發(fā)條件、檢測(cè)機(jī)制及鎖類型,結(jié)合日志分析工具,可以更有效地解決死鎖問題
    2024-11-11
  • MySQL與PHP的基礎(chǔ)與應(yīng)用專題之?dāng)?shù)據(jù)完整性

    MySQL與PHP的基礎(chǔ)與應(yīng)用專題之?dāng)?shù)據(jù)完整性

    MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL?AB?公司開發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL?是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇從數(shù)據(jù)完整性開始
    2022-02-02
  • MySQL命令執(zhí)行sql文件的方法小結(jié)

    MySQL命令執(zhí)行sql文件的方法小結(jié)

    本文給大家分享MySQL命令執(zhí)行sql文件的兩種方法,每種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • MySQL無法輸入中文字符問題的解決辦法

    MySQL無法輸入中文字符問題的解決辦法

    MySQL無法輸入中文的問題大多是由于字符集不匹配所導(dǎo)致的,下面這篇文章主要給大家介紹了關(guān)于MySQL無法輸入中文字符問題的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程

    生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程

    自動(dòng)化運(yùn)維是一個(gè)DBA應(yīng)該掌握的技術(shù),其中,自動(dòng)化安裝數(shù)據(jù)庫是一項(xiàng)基本的技能,這篇文章主要介紹了生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程,需要的朋友可以參考下
    2016-09-09
  • mysql優(yōu)化配置參數(shù)

    mysql優(yōu)化配置參數(shù)

    mysql安裝好需要優(yōu)化配置一下,打開c:\windows\my.ini文件
    2011-03-03
  • 利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)

    利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)

    Xtrabackup 是percona的一個(gè)開源項(xiàng)目,可以熱備份innodb ,XtraDB,和MyISAM(會(huì)鎖表),可以看做是InnoDB Hotbackup的免費(fèi)替代品
    2013-04-04
  • mysql解決遠(yuǎn)程不能訪問的二種方法

    mysql解決遠(yuǎn)程不能訪問的二種方法

    mysql解決遠(yuǎn)程不能訪問的二種方法,需要的朋友可以參考一下
    2013-04-04
  • MySQL 5.7開啟并查看biglog的詳細(xì)教程

    MySQL 5.7開啟并查看biglog的詳細(xì)教程

    binlog 就是binary log,二進(jìn)制日志文件,這個(gè)文件記錄了MySQL所有的DML操作,通過binlog日志我們可以做數(shù)據(jù)恢復(fù),增量備份,主主復(fù)制和主從復(fù)制等等,本文給大家介紹了MySQL 5.7開啟并查看biglog的詳細(xì)教程,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

滨州市| 辉南县| 东山县| 鹤壁市| 江口县| 邵阳市| 项城市| 保亭| 曲阳县| 丰宁| 曲水县| 浠水县| 社会| 淅川县| 阳曲县| 连平县| 安平县| 丰城市| 潜江市| 泾源县| 东宁县| 长沙县| 岳阳市| 武定县| 衡南县| 新干县| 松潘县| 梓潼县| 老河口市| 汉中市| 太湖县| 沅陵县| 嘉定区| 泗洪县| 洪洞县| 铁岭县| 巧家县| 隆德县| 通化市| 东兴市| 漯河市|