最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程_第1頁
最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程_第2頁
最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程_第3頁
最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程_第4頁
最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.最詳細(xì)的PHP操作MYSQL數(shù)據(jù)庫入門教程作者:聶慶鵬(本資料僅供個人學(xué)習(xí)參考之用,請勿用作其他用途)PHP是一門Web編程語言,而MySQL是一款網(wǎng)絡(luò)數(shù)據(jù)庫系統(tǒng)。這二者是目前Web開發(fā)中最黃金的組合之一。那么PHP是如何操作MySQL數(shù)據(jù)庫的呢?從根本上來說,PHP是通過預(yù)先寫好的一些列函數(shù)來與MySQL數(shù)據(jù)庫進(jìn)行通信,向數(shù)據(jù)庫發(fā)送指令、接收返回數(shù)據(jù)等都是通過函數(shù)來完成。圖9-1給出了一個普通PHP程序與MySQL進(jìn)行通信的基本原理示意圖。PHP程序PHP函數(shù)MYSQL數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫1數(shù)據(jù)庫2表1_1表1_2表2_1表2_2圖9-1 PHP程序與MySQL數(shù)據(jù)庫通信原理示意圖上圖展示了

2、PHP程序連接到MySQL數(shù)據(jù)庫服務(wù)器的原理??梢钥闯觯琍HP通過調(diào)用自身的專門用來處理MySQL數(shù)據(jù)庫連接的函數(shù),來實現(xiàn)與MySQL通信。而且,PHP并不是直接操作數(shù)據(jù)庫中的數(shù)據(jù),而是把要執(zhí)行的操作以SQL語句的形式發(fā)送給MySQL服務(wù)器,由MySQL服務(wù)器執(zhí)行這些指令,并將結(jié)果返回給PHP程序。MySQL數(shù)據(jù)庫服務(wù)器可以比作一個數(shù)據(jù)“管家”。其他程序需要這些數(shù)據(jù)時,只需要向“管家”提出請求,“管家”就會根據(jù)要求進(jìn)行相關(guān)的操作或返回相應(yīng)的數(shù)據(jù)。明白了PHP操作MySQL的流程,我們就很容易掌握PHP操作MySQL的相關(guān)函數(shù)。因為以上幾乎每一個步驟,都有相應(yīng)的函數(shù)與之對應(yīng)。開發(fā)PHP數(shù)據(jù)庫程序

3、時,只需要按照流程調(diào)用相關(guān)函數(shù),數(shù)據(jù)庫操作便可輕松實現(xiàn)。PHP操作MySQL常用函數(shù)PHP開發(fā)者為我們提供了大量函數(shù),使我們可以方便的使用PHP連接到MySQL數(shù)據(jù)庫,并對數(shù)據(jù)進(jìn)行操作。學(xué)習(xí)PHP+MYSQL數(shù)據(jù)庫編程,首先要了解這些函數(shù),明確具體的步驟,然后才能進(jìn)入實質(zhì)性開發(fā)階段。PHP中可以用來操作MYSQL數(shù)據(jù)庫的函數(shù)見表9-1:這些函數(shù)中,最常用的有mysql_connect()、mysql_select_db()、mysql_query()、mysql_fetch_array()、mysql_num_rows()、mysql_close()等。下面我們就著重介紹這幾個函數(shù)的使用。表9

4、-1 PHP的MYSQL函數(shù)一覽函數(shù)名功 能mysql_affected_rows 取得前一次 MySQL 操作所影響的記錄行數(shù)mysql_change_user 改變活動連接中登錄的用戶 mysql_client_encoding 返回字符集的名稱mysql_close 關(guān)閉 MySQL 連接mysql_connect 打開一個到 MySQL 服務(wù)器的連接mysql_create_db 新建一個 MySQL 數(shù)據(jù)庫mysql_data_seek 移動內(nèi)部結(jié)果的指針mysql_db_name 取得結(jié)果數(shù)據(jù)mysql_db_query 發(fā)送一條 MySQL 查詢mysql_drop_db 丟棄(

5、刪除)一個 MySQL 數(shù)據(jù)庫mysql_errno 返回上一個 MySQL 操作中的錯誤信息的數(shù)字編碼 mysql_error 返回上一個 MySQL 操作產(chǎn)生的文本錯誤信息 mysql_fetch_array 從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組,或數(shù)字?jǐn)?shù)組,或二者兼有 mysql_fetch_assoc 從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組 mysql_fetch_field 從結(jié)果集中取得列信息并作為對象返回 mysql_fetch_lengths 取得結(jié)果集中每個輸出的長度 mysql_fetch_object 從結(jié)果集中取得一行作為對象mysql_fetch_row 從結(jié)果集中取得一行作為枚舉

6、數(shù)組mysql_field_flags 從結(jié)果中取得和指定字段關(guān)聯(lián)的標(biāo)志 mysql_field_len 返回指定字段的長度 mysql_field_name 取得結(jié)果中指定字段的字段名 mysql_field_seek 將結(jié)果集中的指針設(shè)定為制定的字段偏移量 mysql_field_table 取得指定字段所在的表名 mysql_field_type 取得結(jié)果集中指定字段的類型 mysql_free_result 釋放結(jié)果內(nèi)存mysql_get_client_info 取得 MySQL 客戶端信息mysql_get_host_info 取得 MySQL 主機(jī)信息mysql_get_proto

7、_info 取得 MySQL 協(xié)議信息mysql_get_server_info 取得 MySQL 服務(wù)器信息mysql_info 取得最近一條查詢的信息 mysql_insert_id 取得上一步 INSERT 操作產(chǎn)生的 ID mysql_list_dbs 列出 MySQL 服務(wù)器中所有的數(shù)據(jù)庫 mysql_list_fields 列出 MySQL 結(jié)果中的字段mysql_list_processes 列出 MySQL 進(jìn)程mysql_list_tables 列出 MySQL 數(shù)據(jù)庫中的表mysql_num_fields 取得結(jié)果集中字段的數(shù)目mysql_num_rows 取得結(jié)果集中行的

8、數(shù)目mysql_pconnect 打開一個到 MySQL 服務(wù)器的持久連接 mysql_ping Ping 一個服務(wù)器連接,如果沒有連接則重新連接mysql_query 發(fā)送一條 MySQL 查詢mysql_result 取得結(jié)果數(shù)據(jù)mysql_select_db 選擇 MySQL 數(shù)據(jù)庫mysql_stat 取得當(dāng)前系統(tǒng)狀態(tài)mysql_tablename 取得表名mysql_thread_id 返回當(dāng)前線程的 IDPHP對MySQL數(shù)據(jù)庫的操縱 1、mysql_connect()函數(shù)要在PHP中操作MySQL中的數(shù)據(jù),第一步就是連接到數(shù)據(jù)庫服務(wù)器。也就是建立一條PHP程序到MySQL數(shù)據(jù)庫之

9、間的通道。這樣PHP才能通過這個通道來向MySQL服務(wù)器發(fā)送各種指令,并取得指令執(zhí)行的結(jié)果,將這些結(jié)果應(yīng)用于PHP程序中。mysql_connect()函數(shù)就是用來建立和MySQL數(shù)據(jù)庫的連接。mysql_connect()函數(shù)有5個參數(shù),但是通常情況下我們只用到前三個參數(shù)。格式如下:resource mysql_connect ( string server, string username , string password)該函數(shù)返回類型為resource型,即資源型。三個參數(shù)分別為MySQL服務(wù)器地址、MySQL用戶名、密碼。這里的用戶名可以用超級管理員的,也可以用用戶表中存在的其他用

10、戶。如下面的語句將用超級管理員身份建立一個到本地服務(wù)器的連接:$id=mysql_connect(“l(fā)ocalhost”,”root”,”1234”);其中“l(fā)ocalhost”換成“127.0.0.1”或本地機(jī)器的實際IP地址,效果都是相同的。另外服務(wù)器地址后面可以指定MySQL服務(wù)的端口號,如果是采用默認(rèn)的3306端口,則不必指定。如果采用了其他端口,則需要指定,如“127.0.0.1:88”表示MySQL服務(wù)于本地機(jī)器的88端口。用戶名和密碼均需指定(如密碼為空,則直接用兩個引號即可)。將以上代碼寫在一個PHP程序中,寫法如下:此程序運行之后,如果執(zhí)行成功,則會輸出一個資源型變量$id的

11、編號,類似于“Resource id #2”。如果執(zhí)行失敗,則有多種可能。如果出現(xiàn)下列提示:Fatal error: Call to undefined function mysql_connect in 則說明本地服務(wù)器的MySQL擴(kuò)展庫尚未被載入,因此PHP解釋器無法識別MySQL函數(shù)。請參照本章第一節(jié)的內(nèi)容進(jìn)行重新設(shè)置。如果出現(xiàn)下列提示:Warning: mysql_connect() function.mysql-connect: Unknown MySQL server host 則說明MySQL服務(wù)器地址錯誤,可能是輸入有錯誤,或者服務(wù)器沒有啟動,或者段口號不對。這時可以檢查函數(shù)的

12、第一個參數(shù)是否提供正確,MySQL是否已成功啟動。還有可能出現(xiàn)下列提示:Warning: mysql_connect() function.mysql-connect: Access denied for user 這說明用戶名或密碼有錯誤。或者本帳號沒有在本MySQL服務(wù)器上登陸的權(quán)限。我們這里之所以如此詳細(xì)地講解該函數(shù),就是因為這時連接到MySQL數(shù)據(jù)庫的第一步。只要這一步成功了,那么下面的所有函數(shù)便都能運行。連接到數(shù)據(jù)庫是一切工作的起點。因此必須保證此步驟成功,才能繼續(xù)下面的內(nèi)容。2、mysql_select_db()函數(shù)連接到數(shù)據(jù)庫以后,我們還不能直接操作某個表,因為表都存儲在各個數(shù)據(jù)

13、庫當(dāng)中,需要首先選擇要操作的數(shù)據(jù)庫,才能對這個數(shù)據(jù)庫下面的表進(jìn)行操作。mysql_select_db()函數(shù)就是用來指定要操作的數(shù)據(jù)庫。前面的例子中我們曾在MySQL中創(chuàng)建了一個student數(shù)據(jù)庫,下面的代碼將連接到數(shù)據(jù)庫服務(wù)器,并把student數(shù)據(jù)庫作為當(dāng)前要操作的數(shù)據(jù)庫。1: 本程序中第1行我們建立了一個到本地MySQL數(shù)據(jù)庫服務(wù)器的連接。第2行用mysql_select_db()函數(shù)來指定要操作的數(shù)據(jù)庫。函數(shù)第一個參數(shù)為數(shù)據(jù)庫的名字,第二個參數(shù)為應(yīng)用于哪個連接。第二個參數(shù)可以省略,省略時默認(rèn)使用當(dāng)前連接。一般來說,此參數(shù)可以直接省略。mysql_select_db()函數(shù)返回一個布爾

14、型值。如果執(zhí)行成功返回true,失敗則返回false。函數(shù)沒有任何錯誤信息提示。因此即使你提供的數(shù)據(jù)庫名有錯誤或數(shù)據(jù)庫不存在,本函數(shù)也不會報錯。因此,我們將返回結(jié)果存放在$ok中,通過判斷$ok的值來判斷是否執(zhí)行成功。3、mysql_query()函數(shù)連接到數(shù)據(jù)庫服務(wù)器,并選擇了要操作的數(shù)據(jù)庫之后,下一步就是向服務(wù)器發(fā)送操作指令,也就是SQL語句。這需要大家對MYSQL和SQL語句有一點基本了解?,F(xiàn)在我們來看一個例子,用PHP程序在MySQL中創(chuàng)建一個數(shù)據(jù)庫newdata,并在這個數(shù)據(jù)庫中創(chuàng)建一個表testtable,表的字段可以隨意設(shè)置幾個。1: 2: 3: 用PHP創(chuàng)建新數(shù)據(jù)庫和表4: 5

15、: 6: 13:14: 本程序執(zhí)行完畢后不會有任何輸出。但是如果進(jìn)入MySQL控制臺,查看數(shù)據(jù)庫,就會發(fā)現(xiàn)已經(jīng)成功創(chuàng)建了一個名為newdata的數(shù)據(jù)庫。打開此數(shù)據(jù)庫,可以看到數(shù)據(jù)庫中有一個testtable表。程序執(zhí)行成功。通過程序可以看出mysql_query()函數(shù)的使用十分簡單,只需要將一條SQL語句作為參數(shù)傳遞過去,即可執(zhí)行此SQL語句。第二個參數(shù)$id在一般情況下同樣可以省略。使用mysql_query()函數(shù)可以向數(shù)據(jù)庫服務(wù)器發(fā)送任何合法的SQL指令(前提是數(shù)據(jù)庫要支持該指令)。9-2.php中我們只是測試了CREATE指令,實際上SQL中常用的INSERT、SELECT、UPDA

16、TE、DELETE等基本指令同樣可以用mysql_query()來執(zhí)行。下面我們就利用循環(huán)向服務(wù)器發(fā)送多次INSERT指令,向剛才創(chuàng)建的testtable表中插入多條記錄。1: 2: 3: 用PHP向表中插入數(shù)據(jù)4: 5: 6: ?php7: $id=mysql_connect(localhost,root,1234);8: mysql_select_db(newdata,$id);9: mysql_query(SET CHARACTER SET gb2312);10: for($i=1;$i6;$i+)11: $nl=20+$i;12: $xm=姓名.$i;13: $sql=INSERT I

17、NTO testtable VALUES(.$xm.,.$nl.); 14: $excu=mysql_query($sql,$id);15: if($excu)16: echo $sql;17: echo 第.$i.條數(shù)據(jù)插入成功!;18: else19: echo 數(shù)據(jù)插入失敗,錯誤信息:;20: echo mysql_error();21: 22: 23: mysql_close($id)24: ?25: 26: 本程序的運行結(jié)果如圖9-4所示:圖9-4 向表中插入數(shù)據(jù)要驗證5條信息是否都已確實插入到了數(shù)據(jù)庫中,可以用命令提示符登陸控制臺,用“SELECT * FROM testtable

18、”命令來瀏覽表中的所有數(shù)據(jù),也可以用phpMyAdmin來瀏覽??刂婆_中顯示的數(shù)據(jù)如下:mysql select * from testtable;+-+-+| name | age |+-+-+| 姓名1 | 21 | 姓名2 | 22 | 姓名3 | 23 | 姓名4 | 24 | 姓名5 | 25 |+-+-+5 rows in set (0.00 sec)可見數(shù)據(jù)確實已經(jīng)成功插入到數(shù)據(jù)庫中。本程序看起來行數(shù)較多,但是其結(jié)構(gòu)卻很簡單。讀者可以根據(jù)所學(xué)知識分析一下。我們在這里僅指出三點:1)第9行中,我們用mysql_query()函數(shù)首先向數(shù)據(jù)庫發(fā)送了一條SET CHARACTER指令。

19、這條指令好像與我們的程序無關(guān),為什么要用這條指令呢?原因是我們在本程序中向name字段中插入的值包含中文,如“姓名1”、“姓名2”,由于PHP向MySQL提交數(shù)據(jù)時默認(rèn)采用Latin1字符集,而我們要向數(shù)據(jù)庫中提交的是簡體中文漢字,如果不事先將字符集設(shè)置為gb2312,則很可能會出現(xiàn)字符集不匹配而導(dǎo)致插入失?。ㄗ址煤筒捎玫腗ySQL版本以及安裝MySQL時的設(shè)置有關(guān),有時候在程序中不需要設(shè)置字符集也能正常插入數(shù)據(jù),因此讀者應(yīng)根據(jù)自己機(jī)器的環(huán)境特點決定是否有必要設(shè)置字符集)。2)第11-12行,我們將要插入的兩個字段的值放在兩個變量中,然后在第13行構(gòu)造一個SQL語句,第14行執(zhí)行這個語句。

20、這里之所以采用變量存放字段值和SQL語句,一是為了使程序更加易讀,另外可以避免寫成一條綜合語句過于復(fù)雜而容易出錯。讀者要尤其注意的是第13行,我們在構(gòu)造SQL語句(其實就是一個普通字符串)時,不同數(shù)據(jù)類型的變量用不同的引號等連接。其實這個問題應(yīng)該是一個PHP基本語法的問題,很多初學(xué)者在這個地方容易犯迷糊,因此請讀者多加揣摩,仔細(xì)體會。3)第20行我們首次使用mysql_error()函數(shù)。這個函數(shù)可以返回上一次MySQL返回的錯誤信息。當(dāng)程序出錯時輸出這些錯誤信息對于程序的調(diào)試很有幫助。讀者可以試著故意寫錯SQL語句,或者故意發(fā)送一條非法指令到MySQL服務(wù)器,然后調(diào)用此函數(shù)查看返回的錯誤信息

21、。下面我們再來看一個從數(shù)據(jù)庫中讀取數(shù)據(jù)并用表格顯示在網(wǎng)頁上的例子。還是用mysql_query()函數(shù),向數(shù)據(jù)庫發(fā)送SELECT指令來查詢數(shù)據(jù)。1: 2: 3: 用PHP從表中讀取數(shù)據(jù)4: 5: 6: ?php7: $id=mysql_connect(localhost,root,1234);8: mysql_select_db(newdata,$id);9: mysql_query(SET CHARACTER SET gb2312);10: $query=SELECT * FROM testtable;11: $result=mysql_query($query,$id);12: echo

22、姓名年齡;13: $datanum=mysql_num_rows($result);14: echo 表testtable中共有.$datanum.條數(shù)據(jù); 15: for($i=1;$i=$datanum;$i+)16: $info=mysql_fetch_array($result,MYSQL_ASSOC);17: echo .$infoname.;18: echo .$infoage.;19: 20: echo ;21: mysql_close($id);22: ?23: 24: 本程序的輸出結(jié)果如圖9-5所示:圖9-5 從數(shù)據(jù)表中讀出數(shù)據(jù)本程序中,我們在代碼中加入了一些HTML代碼,用

23、來產(chǎn)生一個表格。在本程序中,我們又用到了幾個新的函數(shù),下面我們就來一一介紹。1) 第9行的字符集設(shè)置語句作用與9-3.php中相似,防止讀出的數(shù)據(jù)出現(xiàn)亂碼。2)第11行中,我們向服務(wù)器發(fā)送了一條SELECT指令。這條指令將返回所有滿足條件的記錄。注意返回的紀(jì)錄是一個資源類型,其內(nèi)容是若干條記錄的集合,可以成為一個記錄集。不能直接用來輸出,我們先將返回的數(shù)據(jù)存放在$result中。3)第13行,我們用mysql_num_rows()函數(shù)來統(tǒng)計一個記錄集中記錄的條數(shù)。注意此函數(shù)專用于統(tǒng)計MySQL查詢結(jié)果記錄集,不能用來統(tǒng)計其他數(shù)據(jù)類型的元素個數(shù)。4)第16行,這一行是關(guān)鍵。這一行用到了mysql

24、_fetch_array()函數(shù)。此函數(shù)是PHP+MYSQL編程中最常用的函數(shù)之一。此函數(shù)的使用格式如下:array mysql_fetch_array ( resource result , int result_type )該函數(shù)的作用是,讀取記錄集result中的當(dāng)前記錄,將記錄的各個字段的值存入一個數(shù)組中,并返回這個數(shù)組,然后將記錄集指針移動到下一條記錄。如果記錄集已經(jīng)到達(dá)末尾,則返回false。第二個參數(shù)result_type為可選,此參數(shù)用來設(shè)置返回的數(shù)組采用什么樣的下標(biāo)。有三個備選值:MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH。三個參數(shù)的含義如下:MYSQL_ASSOC:返回的數(shù)組將以該記錄的字段名稱作為下標(biāo)。如在本例中,要輸出此數(shù)組中的“姓名”字段,可以用$infoname。這里$info是數(shù)組名,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論