15.PHP訪問MySQL的擴展函數(shù)

PHP訪問MySQL數(shù)據(jù)庫服務(wù)器的流程

MySQL采用的是“客戶機/服務(wù)器”體系結(jié)構(gòu)蜗字〉欤可以使用PHP腳本去處理數(shù)據(jù)庫中的數(shù)據(jù),則PHP充當(dāng)了MySQL“客戶機”的角色晴楔。因為通過PHP程序再去結(jié)合一些前臺技術(shù)開發(fā)的圖形界面摆昧,就可以很輕松的管理數(shù)據(jù)庫了。

PHP訪問MySQL數(shù)據(jù)庫服務(wù)器是通過安裝相應(yīng)的擴展模塊完成的蜒程,本章重點是介紹使用mysql擴展模塊中的函數(shù)去訪問MySQL绅你。要想使用這個功能擴展模塊,PHP的Linux版本必須在編譯時加上一個--with-mysql選項昭躺。PHP的Windows版本則通過一個DLL文件提供了相應(yīng)的擴展忌锯。無論使用的是哪一種操作系統(tǒng),都必須在php.ini文件里啟用這個擴展以確保PHP能夠找到所有必要的DLL领炫∨伎澹可以通過查看phpinfo()確認(rèn)mysql模塊是否安裝。

使用PHP安裝的mysql擴展函數(shù)帝洪,和直接使用客戶端軟件去訪問MySQL數(shù)據(jù)庫服務(wù)器似舵,原理及操作步驟是相同的。

在PHP腳本中操作MySQL數(shù)據(jù)庫

1. 連接MySQL數(shù)據(jù)庫服務(wù)器

通過PHP腳本程序去管理MySQL服務(wù)器中的數(shù)據(jù)葱峡,也必須先建立連接砚哗,然后才能通過PHP中的函數(shù)向服務(wù)器中發(fā)送SQL查詢語句。PHP可以通過MySQL功能模塊去連接MySQL服務(wù)器砰奕,辦法是調(diào)用mysql_connect()函數(shù)蛛芥,和使用MySQL客戶機程序連接MySQL服務(wù)器類似。

resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] )

如果連接成功军援,這個函數(shù)將返回一個資源類型的標(biāo)識符號($link)仅淑。如果與MySQL服務(wù)器建立了不只一條的連接,在以后的操作中就必須使用它們的標(biāo)識符號來區(qū)分它們胸哥。而如果只與MySQL服務(wù)器建立了一條連接涯竟,這條連接就會成為與MySQL服務(wù)器之間的默認(rèn)連接,也就無須在調(diào)用各種與MySQL操作相關(guān)的函數(shù)中給出這個標(biāo)識符號了烘嘱。如果連接失敗昆禽,這個函數(shù)將返回FALSE,并向Web服務(wù)器發(fā)送一條出錯消息蝇庭∽肀睿可以通過下面的代碼檢查與MySQL服務(wù)器建立的連接是否成功,并輸出與當(dāng)前連接有關(guān)的詳細(xì)信息哮内。

2. 判斷是否連接正確

我們也可以使用兩個函數(shù)來判斷盗棵,mysql_errno()mysql_error()壮韭,這兩個函數(shù)分別返回上次MySQL發(fā)生的錯誤號和錯誤信息,如果未發(fā)生任何錯誤,mysql_errno()函數(shù)將返回0.所以纹因,我們可以使用判斷來進行處理:

int mysql_errno ([ resource $link_identifier ] )
string mysql_error ([ resource $link_identifier ] )

  if(mysql_errno()){
    exit(‘?dāng)?shù)據(jù)庫連接錯誤喷屋!’.mysql_error());
  }

3. 選擇數(shù)據(jù)庫

通常數(shù)據(jù)庫的創(chuàng)建工作都是先由數(shù)據(jù)庫管理員(DBA)建立,再由PHP程序員在腳本中使用瞭恰。在使用PHP腳本建立起與MySQL服務(wù)器的連接之后屯曹,為了避免每次調(diào)用PHP的mysql擴展函數(shù)時都指定目標(biāo)數(shù)據(jù)庫,最好先用mysql_select_db()函數(shù)為后續(xù)操作選定一個默認(rèn)數(shù)據(jù)庫惊畏,這個函數(shù)和SQL命令“USE bookstore”功能相似恶耽。

bool mysql_select_db ( string $database_name [, resource $ link_identifier ] )

4. 設(shè)置字符集

為了避免讀取和寫入數(shù)據(jù)時發(fā)生數(shù)據(jù)亂碼,除了要將文件格式設(shè)置為utf-8無bom頭格式颜启,還要將數(shù)據(jù)庫客戶端字讀集設(shè)置為utf8偷俭,所以我們需要在發(fā)送sql語句之前,使用mysql_set_charset()函數(shù)來完成數(shù)據(jù)庫字符集的設(shè)定缰盏!

bool mysql_set_charset ( string $charset [, resource $link_identifier = NULL ] )

5. 準(zhǔn)備SQL語句

設(shè)置字符集完畢之后涌萤,我們需要為讀取或?qū)懭霐?shù)據(jù)設(shè)計SQL語句字符串,
例如:

$sql = “select username,password from bbs_user”;

6. 發(fā)送SQL語句到MySQL服務(wù)器

設(shè)計好SQL語句之后口猜,我們使用函數(shù)mysql_query()函數(shù)负溪,將SQL語句發(fā)送到MySQL數(shù)據(jù)庫服務(wù)器,由MySQL數(shù)據(jù)庫服務(wù)器來執(zhí)行此SQL語句

這里注意暮的,我們之所以將SQL語句賦值給一個變量是為了出現(xiàn)錯誤的時候便于排錯笙以,我們可以直接輸出$sql這個變量。

int/resource mysql_query ( string $query [, resource $link_identifier ] )

7. 處理結(jié)果集

將SQL語句發(fā)送到MySQL服務(wù)器之后冻辩,MySQL服務(wù)器會將執(zhí)行SQL語句之后的結(jié)果返回給PHP端猖腕,這里的結(jié)果分為兩種:
1.布爾型
2.結(jié)果集資源類型

當(dāng)我們執(zhí)行的SQL語句是DML語句,也就是增恨闪,刪倘感,改三種語句,這時mysql_query()返回的類型是布爾類型咙咽,執(zhí)行成功返回真老玛,失敗返回假,但有時SQL語句執(zhí)行成功钧敞,但不一定有受影響行數(shù)蜡豹,所以我們可以使用mysql_affected_rows()函數(shù)返回受影響行數(shù);

當(dāng)我們執(zhí)行的是DQL語句溉苛,也就是查詢語句镜廉,mysql_query()函數(shù)將返回的是結(jié)果集資源類型,我們可以使用mysql_num_rows($result)函數(shù)來獲取結(jié)果集當(dāng)中的記錄條數(shù)愚战,但是我們無法將結(jié)果集資源當(dāng)中的數(shù)據(jù)得到娇唯,因此PHP為我們提供了4個函數(shù)齐遵,來解析此結(jié)果集資源:

  • mysql_fetch_array() 返回索引和關(guān)聯(lián)的混合數(shù)組
  • mysql_fetch_assoc() 返回關(guān)聯(lián)數(shù)組
  • mysql_fetch_row() 返回索引數(shù)組
  • mysql_fetch_object() 返回一個對象

如果沒有特殊要求,盡量不要去使用mysql_fetch_array()方法塔插。使用mysql_fetch_row()或mysql_fetch_assoc()函數(shù)實現(xiàn)相同的功能梗摇,效率會更高一些。上述四個函數(shù)每執(zhí)行一次想许,結(jié)果集資源的指針都將向后移動一位伶授,直到最后一位,將返回布爾類型的FALSE流纹,因此谎砾,我們可以使用條件型循環(huán)while配合上述四個函數(shù)來使用,以mysql_fetch_assoc()函數(shù)為例捧颅,如下所示:

while($row=mysql_fetch_assoc($result)){
    //$row為一條記錄的數(shù)組  
}

從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組,或數(shù)字?jǐn)?shù)組较雕,或二者兼有

array mysql_fetch_array ( resource $result [, int $ result_type ] )

從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組

array mysql_fetch_assoc ( resource $result )

從結(jié)果集中取得一行作為對象

object mysql_fetch_object ( resource $result )

從結(jié)果集中取得一行作為枚舉數(shù)組

array mysql_fetch_row ( resource $result )

取得結(jié)果集中行的數(shù)目

int mysql_num_rows ( resource $result )

除此之外碉哑,我們還可以使用mysql_insert_id()來獲取插入的上一條記錄的主鍵ID的值,可以使用mysql_num_fileds()來獲取結(jié)果集中字段的個數(shù)亮蒋,mysql_fetch_field()函數(shù)將取得具體字段的信息扣典,mysql_result()獲取查詢記錄的第n條信息。

取得前一次 MySQL 操作所影響的記錄行數(shù)

int mysql_affected_rows ([ resource $link_identifier ] )

取得上一步 INSERT 操作產(chǎn)生的 ID

int mysql_insert_id ([ resource $link_identifier ] )

取得結(jié)果集中字段的數(shù)目

int mysql_num_fields ( resource $result )

取得結(jié)果數(shù)據(jù)

mixed mysql_result ( resource $result , int $row [, mixed $field ] )

從結(jié)果集中取得列信息并作為對象返回

object mysql_fetch_field ( resource $result [, int $field_offset ] )

8.釋放結(jié)果集資源慎玖,關(guān)閉數(shù)據(jù)庫連接

PHP會把結(jié)果數(shù)據(jù)表一直保存到PHP腳本執(zhí)行結(jié)束贮尖,如果必須提前釋放某次查詢的結(jié)果數(shù)據(jù)表,就可使用mysql_free_result()函數(shù)提前釋放它趁怔,最后將數(shù)據(jù)庫連接關(guān)閉掉湿硝,我們使用mysql_close()函數(shù)來完成。

bool mysql_free_result ( resource $result )
bool mysql_close ([ resource $link_identifier ] )

使用mysql函數(shù)實現(xiàn)一套留言表信息的增刪改查練習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末润努,一起剝皮案震驚了整個濱河市关斜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铺浇,老刑警劉巖痢畜,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鳍侣,居然都是意外死亡丁稀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門倚聚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來线衫,“玉大人,你說我怎么就攤上這事秉沼⊥叭福” “怎么了矿酵?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矗积。 經(jīng)常有香客問我全肮,道長,這世上最難降的妖魔是什么棘捣? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任辜腺,我火速辦了婚禮,結(jié)果婚禮上乍恐,老公的妹妹穿的比我還像新娘评疗。我一直安慰自己,他們只是感情好茵烈,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布百匆。 她就那樣靜靜地躺著,像睡著了一般呜投。 火紅的嫁衣襯著肌膚如雪加匈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天仑荐,我揣著相機與錄音雕拼,去河邊找鬼。 笑死粘招,一個胖子當(dāng)著我的面吹牛啥寇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒扎,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼辑甜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了袍冷?” 一聲冷哼從身側(cè)響起栈戳,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎难裆,沒想到半個月后子檀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡乃戈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年褂痰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症虑。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡缩歪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谍憔,到底是詐尸還是另有隱情匪蝙,我是刑警寧澤主籍,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站逛球,受9級特大地震影響千元,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颤绕,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一幸海、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奥务,春花似錦物独、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帚称,卻和暖如春瞻凤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背世杀。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肝集,地道東北人瞻坝。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像杏瞻,于是被迫代替她去往敵國和親所刀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫捞挥? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序浮创。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建砌函,訪問斩披,管理...
    chen_000閱讀 4,030評論 0 19
  • 1.MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā)讹俊,目前屬于 Oracle 旗下產(chǎn)品垦沉。My...
    黃花菜已涼閱讀 4,564評論 3 60
  • 語 句 功 能 數(shù)據(jù)操作 SELECT——從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列INSERT——向數(shù)據(jù)庫表添加新數(shù)據(jù)行DELE...
    戰(zhàn)敭閱讀 5,077評論 0 53
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解...
    上街買菜丶迷倒老太閱讀 1,352評論 0 20
  • 我一直不知道外冀,我到底得有多努力才能過上想要的生活。 和幾個兄弟姐妹在群里聊天讹弯,我只要稍微一抱怨她們就會說况既,你已經(jīng)夠...
    太陽島的雪花閱讀 153評論 2 2