php訪問mysql(畢業(yè)論文_外文翻譯)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  畢 業(yè) 論 文(設(shè) 計(jì))外文翻譯</p><p>  翻譯題目: 通過PHP訪問MySQL _ </p><p>  英文題目: Getting PHP to Talk to MySQl </p><p>  姓 名__________________</p>&

2、lt;p>  學(xué) 號(hào)__________________</p><p>  專業(yè)班級(jí)__________________</p><p>  指導(dǎo)教師__________________</p><p>  提交日期__________________</p><p>  教務(wù)處制通過PHP訪問MySQL</p>

3、<p><b>  譯文:</b></p><p>  現(xiàn)在你已經(jīng)可以熟練地使用MySQL客戶端軟件來操作數(shù)據(jù)庫里的數(shù)據(jù),我們也可以開始學(xué)習(xí)如何使用PHP來顯示和修改數(shù)據(jù)庫里的數(shù)據(jù)了。PHP有標(biāo)準(zhǔn)的函數(shù)用來操作數(shù)據(jù)庫。</p><p>  我們首先學(xué)習(xí)PHP內(nèi)建的數(shù)據(jù)庫函數(shù),然后會(huì)學(xué)習(xí)PHP擴(kuò)展和應(yīng)用程序庫(PEAR,PHP Extension and Ap

4、plication Repository )中的數(shù)據(jù)庫函數(shù),我們可以使用這些函數(shù)操作所有支持的數(shù)據(jù)庫。這種靈活性源自于抽象。對(duì)于編程接口而言,抽象簡(jiǎn)化了復(fù)雜的交互過程。它將交互過程中無關(guān)緊要的部分屏蔽起來,讓你關(guān)注于重要的部分。PEAR的DB類就是這樣一種數(shù)據(jù)庫接口的抽象。你登錄一個(gè)數(shù)據(jù)庫所需要提供的信息被減少到最少。這種標(biāo)準(zhǔn)的格式可以通過同一個(gè)函數(shù)來訪問MySQL以及其他的數(shù)據(jù)庫。同樣,一些MySQL特定的函數(shù)被更一般的、可以用在很多

5、數(shù)據(jù)庫上的函數(shù)所替代。比如,MySQL特定的連接函數(shù)是:</p><p>  mysql_connect($db_host, $db_username, $db_password);</p><p>  而PEAR的DB提供的連接函數(shù)是:</p><p>  $connection = DB::connect("mysql://$db_username:$

6、db_password@$db_host/$db_database");</p><p>  兩個(gè)命令都提供了同樣的基本信息,但是PEAR的函數(shù)中還指定了要連接的數(shù)據(jù)庫的類型。你可以連接到MySQL或者其他支持的數(shù)據(jù)庫。我們會(huì)詳細(xì)討論這兩種連接方式。</p><p>  本章中,我們會(huì)學(xué)習(xí)如何從PHP連接到MySQL的服務(wù)器,如何使用PHP訪問數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù),以及如何正確的向

7、用戶顯示信息。</p><p><b>  步驟</b></p><p>  無論是通過MySQL命令行工具,還是通過PHP,執(zhí)行一個(gè)查詢的基本步驟都是一樣的:</p><p><b>  ? 連接到數(shù)據(jù)庫</b></p><p>  ? 選擇要使用的數(shù)據(jù)庫</p><p>

8、  ? 創(chuàng)建SELECT語句</p><p><b>  ? 執(zhí)行查詢</b></p><p><b>  ? 顯示結(jié)果</b></p><p>  我們將逐一介紹如何用PHP和PEAR的函數(shù)完成上面的每一步。</p><p><b>  資源</b></p>&

9、lt;p>  當(dāng)連接到MySQL數(shù)據(jù)庫的時(shí)候,你會(huì)使用到兩個(gè)新的資源。第一個(gè)是連接的標(biāo)識(shí)符,它記錄了一個(gè)活動(dòng)連接用來連接到數(shù)據(jù)庫所必需的所有信息。另外一個(gè)資源是結(jié)果資源,它包含了用來從一個(gè)有效的數(shù)據(jù)庫查詢結(jié)果中取出結(jié)果所需要的所有信息。本章中我們會(huì)創(chuàng)建并使用這兩種資源。</p><p>  使用PHP函數(shù)查詢數(shù)據(jù)庫</p><p>  本節(jié)我們會(huì)介紹如何使用PHP連接MySQL數(shù)據(jù)庫

10、。這非常簡(jiǎn)單,我們會(huì)用一些例子說明。但是之前我們應(yīng)該稍微了解一下幕后發(fā)生的事情。當(dāng)你試圖連接一個(gè)MySQL數(shù)據(jù)庫的時(shí)候,MySQL服務(wù)器會(huì)根據(jù)你的用戶名和密碼進(jìn)行身份認(rèn)證。PHP為你建立數(shù)據(jù)庫的連接,你可以立即開始查詢并得到結(jié)果。</p><p>  我們需要同樣的信息來連接數(shù)據(jù)庫:</p><p>  ? 數(shù)據(jù)庫服務(wù)器的IP地址</p><p><b>

11、  ? 數(shù)據(jù)庫的名字</b></p><p><b>  ? 用戶名</b></p><p><b>  ? 密碼</b></p><p>  在開始之前,首先使用MySQL的命令行客戶端確認(rèn)你登錄到數(shù)據(jù)庫。</p><p>  圖9-1顯示了數(shù)據(jù)庫交互過程的各個(gè)步驟和兩種類型資源之間的

12、關(guān)系。創(chuàng)建SELECT語句發(fā)生在第三個(gè)函數(shù)調(diào)用之前,但是在圖中沒有顯示出來。它是通過普通的PHP代碼,而不是MySQL特定的PHP函數(shù)完成的。</p><p>  圖9-1:使用數(shù)據(jù)庫時(shí)函數(shù)和資源之間的交互</p><p><b>  包含數(shù)據(jù)庫登錄細(xì)節(jié)</b></p><p>  我們先創(chuàng)建一個(gè)文件,用來保存登錄MySQL所用到的信息。我們建

13、議你把這些信息放在單獨(dú)的文件里然后通過include來使用這個(gè)文件。這樣一來如果你修改了數(shù)據(jù)庫的密碼。無論有多少個(gè)PHP文件訪問數(shù)據(jù)庫,你只需要修改這一個(gè)文件。</p><p>  假設(shè)這個(gè)文件的名字叫做db_login.php,并且它跟其他所用PHP文件放在同一個(gè)目錄下。這個(gè)文件的內(nèi)容如例9-1所示。</p><p>  例9-1:設(shè)置數(shù)據(jù)庫登錄的配置文件模板</p>&l

14、t;p><b>  <?php</b></p><p>  $db_host='hostname of database server';</p><p>  $db_database='database name';</p><p>  $db_username='username'

15、;</p><p>  $db_password='password';</p><p><b>  ?></b></p><p>  在例9-2中,我們創(chuàng)建的文件使用跟Web服務(wù)器放在同一臺(tái)機(jī)器上的數(shù)據(jù)庫,并指定的數(shù)據(jù)庫的名字,用戶名和密碼。</p><p>  例9-2:db_login.php

16、文件示例</p><p><b>  <?php</b></p><p>  $db_host='localhost';</p><p>  $db_database='test';</p><p>  $db_username='test';</p>

17、<p>  $db_password='yourpass';</p><p><b>  ?></b></p><p>  圖9-2顯示了如何在其他PHP文件中使用這個(gè)文件。我們會(huì)繼續(xù)使用在第七章中創(chuàng)建的數(shù)據(jù)庫。</p><p>  圖9-2:在多文件中重復(fù)使用登錄信息</p><p> 

18、 例9-3是精簡(jiǎn)后的,用mysqldump命令得到的重建這個(gè)數(shù)據(jù)庫的SQL命令。</p><p>  例9-3:重建測(cè)試數(shù)據(jù)庫的SQL語句</p><p>  DROP TABLE IF EXISTS books;</p><p>  CREATE TABLE books (</p><p>  title_id int(11) NOT NU

19、LL auto_increment,</p><p>  title varchar(150) default NULL,</p><p>  pages int(11) default NULL,</p><p>  PRIMARY KEY (title_id)</p><p>  ) ENGINE=MyISAM DEFAULT CHARS

20、ET=latin1;</p><p><b>  --</b></p><p>  -- Dumping data for table books</p><p><b>  --</b></p><p>  INSERT INTO books VALUES (1,'Linux in a N

21、utshell',476),(2,'Classic Shell Scripting',256);</p><p><b>  --</b></p><p>  -- Table structure for table purchases</p><p><b>  --</b></p>

22、<p>  DROP TABLE IF EXISTS purchases;</p><p>  CREATE TABLE purchases ( </p><p>  id int(11) NOT NULL auto_increment, </p><p>  user varchar(10) default NULL, </p><

23、p>  title varchar(150) default NULL, </p><p>  day date default NULL,</p><p>  PRIMARY KEY (id)</p><p>  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;</p><p><b>  --

24、</b></p><p>  -- Dumping data for table purchases</p><p><b>  --</b></p><p>  LOCK TABLES purchases WRITE;</p><p>  INSERT INTO purchases VALUES (1,&#

25、39;Mdavis','Regular Expression Pocket Reference','2005-02-15'),(2,'Mdavis','JavaScript & DHTML Cookbook','2005-02-10');</p><p>  如果你在第8章中沒有創(chuàng)建這些表,可以將例9-3中的代碼保存成

26、文件backup.sql,然后在命令行執(zhí)行命令,命令格式如下:</p><p>  mysql -u username -ppassword -D database_name < backup_file_name.sql</p><p>  如果使用例子中的值,那么這個(gè)命令就是:</p><p>  mysql -u test -pyourpass -D te

27、st < backup.sql</p><p>  數(shù)據(jù)庫的名字叫test,它包含三個(gè)表,分別是books、authors和purchases。每個(gè)表都有一些示例記錄。這些就足以讓我們開始使用PHP來進(jìn)行查詢了。</p><p><b>  連接到數(shù)據(jù)庫</b></p><p>  我們需要做的頭一件事情是連接數(shù)據(jù)庫,并且檢查連接是否確實(shí)

28、建立起來。如例9-4所示,通過include包含連接信息的文件,我們可以在調(diào)用mysql_connect函數(shù)的時(shí)候使用這些變量而不是將這些值寫死在代碼中。我們使用一個(gè)叫做db_test.php的文件,往其中增加這些代碼段。</p><p>  例9-4:在db_test.php中包含連接參數(shù)和調(diào)用mysql_connect</p><p>  // Include our login in

29、formation</p><p>  include('db_login.php');</p><p>  // Connect</p><p>  $connection = mysql_connect($db_host, $db_username, $db_password);</p><p>  if (!$conne

30、ction){</p><p>  die ("Could not connect to the database: <br />". mysql_error( ));</p><p><b>  }</b></p><p>  函數(shù)mysql_connect的參數(shù)是數(shù)據(jù)庫服務(wù)器主機(jī)、用戶名和密碼。如果連接成功,

31、就會(huì)返回新建立的連接,如果不能建立連接就會(huì)返回FALSE。檢查這個(gè)函數(shù)的返回值來確保連接的確建立起來了。如果遇到問題,比如不正確的密碼,可以使用mysql_error打印一條友好的警告信息以及導(dǎo)致錯(cuò)誤的原因。</p><p>  請(qǐng)注意我們還沒有指定數(shù)據(jù)庫的名字。</p><p><b>  診斷連接錯(cuò)誤</b></p><p>  你可能遇到

32、的一個(gè)錯(cuò)誤是:</p><p>  Fatal error: Call to undefined function mysql_connect( ) in C:\Program Files\Apache</p><p>  Software Foundation\Apache2.2\htdocs\db_test.php on line 4</p><p>  這個(gè)錯(cuò)

33、誤發(fā)生的原因是下載安裝的PHP5.x默認(rèn)沒有包括對(duì)MySQL的支持。解決這個(gè)問題需要將php_mysql.dll文件從PHP壓縮包例的ext/目錄復(fù)制到C:/php,并修改C:\WINDOWS\php.ini文件,確保下面兩行沒有被注釋掉(注釋的方法在行首使用分號(hào))。</p><p>  extension_dir = "c:/PHP/ext/"</p><p>  e

34、xtension=php_mysql.dll</p><p>  這樣PHP擴(kuò)展的目錄就被設(shè)為C:\PHP,MySQL的擴(kuò)展也會(huì)被使用。在編輯php.ini文件的時(shí)候,你可以使用編輯器的搜索功能來檢查這兩行是否已經(jīng)存在,只是需要去掉注釋,并且需要重新輸入。</p><p>  重新啟動(dòng)Apache,這樣MySQL的支持就會(huì)被打開了。</p><p><b>

35、;  選擇數(shù)據(jù)庫</b></p><p>  建立連接之后,下一步就是使用mysql_select_db來選擇我們要用的數(shù)據(jù)庫。它的參數(shù)有兩個(gè):數(shù)據(jù)庫名和可選的數(shù)據(jù)庫連接。如果不指定數(shù)據(jù)庫連接,默認(rèn)使用上一條mysql_connect所建立的連接。</p><p>  // Select the database</p><p>  $db_select

36、=mysql_select_db($db_database);</p><p>  if (!$db_select)</p><p><b>  {</b></p><p>  die ("Could not select the database: <br />". mysql_error( ));</p

37、><p><b>  }</b></p><p>  同樣的,每次訪問數(shù)據(jù)庫的時(shí)候最好能檢查可能的錯(cuò)誤并且進(jìn)行顯示。</p><p>  現(xiàn)在我們做好了一切準(zhǔn)備工作,可以開始執(zhí)行SQL查詢了。</p><p>  構(gòu)建SQL SELECT查詢</p><p>  構(gòu)建SQL查詢非常容易就是將一個(gè)字符串

38、賦值給變量。這個(gè)字符串就是我們的SQL查詢,當(dāng)然我們要給出有效的SQL查詢,否則執(zhí)行這個(gè)查詢的時(shí)候MySQL會(huì)返回錯(cuò)誤。我們使用$query作為變量名,這個(gè)名字對(duì)應(yīng)其目的,你也可以選擇任何你喜歡的變量名。這個(gè)例子中的SQL查詢是”SELECT * FROM books”。</p><p>  你可以使用字符串連接操作符(.)來構(gòu)建查詢:</p><p>  // Assign the qu

39、ery</p><p>  $select = ' SELECT ';</p><p>  $column = ' * ';</p><p>  $from = ' FROM ';</p><p>  $tables = ' books ';</p><p&g

40、t;  $where = ' NATURAL JOIN authors';</p><p>  $query = $select.$column.$from.$tables.$where;</p><p>  這個(gè)版本的代碼比下面的代碼要靈活多了:</p><p>  // Assign the query</p><p> 

41、 $query = "SELECT * FROM books NATURAL JOIN authors";</p><p>  查詢字符串也可以在WHERE子句中使用變量來限定返回什么樣的行,這些變量可能是用戶信息,也可能是來自其他的查詢。</p><p>  現(xiàn)在我們已經(jīng)將查詢賦值給了一個(gè)變量,下一步就是執(zhí)行它。</p><p><b&g

42、t;  執(zhí)行查詢</b></p><p>  使用mysql_query函數(shù)來告訴數(shù)據(jù)庫執(zhí)行查詢。它有兩個(gè)參數(shù):查詢和可選的數(shù)據(jù)庫連接,返回值是查詢結(jié)果。我們將查詢結(jié)果保存在一個(gè)變量里,也許你已經(jīng)猜到我們要用變量名就是$result。這里同樣有必要檢查mysql_query的返回值不是FALSE來確保查詢字符串和數(shù)據(jù)庫連接都沒有問題。</p><p>  // Execute

43、the query</p><p>  $result = mysql_query( $query );</p><p>  if (!$result){</p><p>  die ("Could not query the database: <br />". mysql_error( ));</p><p&g

44、t;<b>  }</b></p><p>  當(dāng)數(shù)據(jù)庫查詢的時(shí)候,所有的結(jié)果構(gòu)成一個(gè)結(jié)果集。這些結(jié)果跟使用mysql命令行客戶端執(zhí)行同樣查詢所得到的行一致。要顯示這些結(jié)果,你需要依次處理這些行。</p><p><b>  取結(jié)果并顯示</b></p><p>  使用mysql_fetch_row從結(jié)果集中取出一行,它

45、的用法如下:</p><p>  array mysql_fetch_row ( resource $result);</p><p>  它的參數(shù)是SQL查詢返回的結(jié)果,我們將結(jié)果保存在$result中。每次調(diào)用它返回一行數(shù)據(jù),直到?jīng)]有數(shù)據(jù)為止,這時(shí)候它返回FALSE。這樣,我們可以使用一個(gè)循環(huán),在循環(huán)內(nèi)調(diào)用mysql_fetch_row并使用一些代碼來顯示每一行。</p>

46、<p>  // Fetch and display the results</p><p>  while ($result_row = mysql_fetch_row(($result))){</p><p>  echo 'Title: '.$result_row[1] . '<br />';</p><p&

47、gt;  echo 'Author: '.$result_row[4] . '<br /> ';</p><p>  echo 'Pages: '.$result_row[2] . '<br /><br />';</p><p><b>  }</b></p>

48、;<p>  結(jié)果行的所有列都保存在一個(gè)數(shù)組里,可以方便地進(jìn)行訪問。變量$result_row[2]訪問結(jié)果行的第二個(gè)屬性(數(shù)組的順序是查詢是定義的列的順序,如果使用SELECE * ,那么數(shù)組順序就是表的列的順序)。</p><p><b>  取結(jié)果的方式</b></p><p>  去結(jié)果的方式不止一種。使用mysql_fetch_arrry可以一

49、次性將所有結(jié)果放在一個(gè)數(shù)組里。它的參數(shù)是查詢結(jié)果和一個(gè)可選的結(jié)果綁定方式。如果綁定方式指定為MYSQL_ASSOC,數(shù)組中的結(jié)果則使用查詢中列的名字進(jìn)行訪問。如果指定了MYSQL_NUM,那么就使用從0開始的數(shù)字來訪問結(jié)果。默認(rèn)使用的方式是MYSQL_BOTH,這樣返回的數(shù)組支持兩種類型的訪問。Mysql_fetch_assoc是使用MYSQL_ASSOC取結(jié)果的另外一種方式。</p><p>  用mysql_

50、fetch_array加上MYSQL_ASSOC的方式重寫上面的代碼,如下所示:</p><p>  // Fetch and display the results</p><p>  while ($result_row = mysql_fetch_array($result, MYSQL_ASSOC)){</p><p>  echo 'Title:

51、'.$result_row['title'] . '<br />';</p><p>  echo 'Author: '.$result_row['author'] . '<br /> ';</p><p>  echo 'Pages: '.$result_row

52、['pages'] . '<br /><br />';</p><p><b>  }</b></p><p><b>  關(guān)閉連接</b></p><p>  絕大部分情況下,我們?cè)谑褂猛暌粋€(gè)數(shù)據(jù)庫之后要關(guān)閉到它的連接。使用mysql_close來關(guān)閉一個(gè)數(shù)據(jù)庫,它

53、會(huì)告訴PHP和MySQL這個(gè)數(shù)據(jù)庫連接已經(jīng)不再使用,所使用的所有資源和內(nèi)存都可以釋放。</p><p>  mysql_close($connection)</p><p><b>  使用PEAR</b></p><p>  PEAR是一個(gè)框架和可重用PHP組建的發(fā)布系統(tǒng),它為PHP開發(fā)提供了一套增強(qiáng)的功能,PEAR包括很多種模塊,用來處理從

54、會(huì)話管理到購(gòu)物車功能的幾乎所有事情。表9-1列出了現(xiàn)有的模塊種類。</p><p>  表9-1:PEAR模塊種類</p><p>  Authentication        HTML            

55、        Processing</p><p>  Benchmarking          HTTP            &

56、#160;       Science</p><p>  Caching               Images        &#

57、160;         Semantic Web</p><p>  Configuration         Internationalization    Streams</p><p&g

58、t;  Console               Logging                 Structures</p>

59、<p>  Database              Mail                    S

60、ystem</p><p>  Date/Time             Math                  

61、60; Test</p><p>  Encryption            Networking              Tools and utilitie

62、s</p><p>  Event                 Numbers               &#

63、160; Validate</p><p>  File formats          Payment                 Web serv

64、ices</p><p>  File system           PEAR                    XM

65、L</p><p>  GTK components        PHP</p><p>  我們的列表還不夠完整,可以訪問http://pear.php.net來獲得供下載的所有模塊。</p><p><b>  安裝</b></p><p>  

66、PEAR使用包管理器來管理安裝PEAR模塊。是否需要安裝包管理取決于你所使用的PHP版本。如果你使用的版本是PHP4.4.0或者更新的版本,那么就已經(jīng)安裝了包管理器。如果你使用的是PHP5.0,則PEAR是一個(gè)單獨(dú)的包。我們要用到的DB包是可選的,但是它會(huì)被包管理器默認(rèn)安裝。所以,如果你有包管理器,那么就全搞定了。</p><p><b>  UNIX</b></p><

67、p>  在UNIX系統(tǒng)下,可以通過在shell(命令行)下執(zhí)行下面的命令來安裝包管理器:lynx -source http://go-pear.org/ | php</p><p>  這個(gè)命令使用go-pear.org的輸出(實(shí)際就是PHP源代碼)來安裝PEAR,go-pear.org的輸出被傳給php命令執(zhí)行。</p><p><b>  Windows</b&g

68、t;</p><p>  安裝完P(guān)HP5后,會(huì)有一個(gè)PEAR安裝腳本C:\php\go-pear.bat。如果你在第二章沒有安裝所以文件,那么現(xiàn)在把所有的PHP文件都解壓到C:\php下,然后執(zhí)行這個(gè)批處理文件。</p><p>  圖9-5顯示執(zhí)行PEAR安裝程序后的初始屏幕。</p><p>  圖9-5:go-pear.bat安裝腳本</p>&

69、lt;p>  安裝程序會(huì)要求輸入幾個(gè)路徑,你可以使用默認(rèn)值。那樣安裝的最上級(jí)目錄就是c:\php.</p><p>  PEAR安裝程序會(huì)創(chuàng)建文件C:\php\PEAR_ENV.reg,雙擊該文件在注冊(cè)表中設(shè)置PEAR的路徑。這個(gè)文件的內(nèi)容視安裝的PEAR版本而定。當(dāng)彈出對(duì)話框要求確認(rèn)的時(shí)候,點(diǎn)擊OK將信息加入注冊(cè)表。</p><p>  在執(zhí)行完這個(gè)批處理文件后,你可能需要編輯ph

70、p.ini文件,將PEAR的目錄加入到include_path中。Php.ini的447行看起來如下:</p><p>  include_path = ".;c:\php\includes;c:\php\PEAR"</p><p>  Apache必須重啟才能使用DB包。</p><p><b>  托管ISP</b>&l

71、t;/p><p>  大部分人的ISP都安裝了PEAR DB。如果你的ISP沒有提供,可以要求他們安裝。你可以通過執(zhí)行例9-8中的代碼來判斷PEAR DB是否已經(jīng)安裝,如果沒有,那么在執(zhí)行這個(gè)腳本的時(shí)候“require_once(‘DB.php’)”這一行就會(huì)報(bào)錯(cuò)。</p><p><b>  增加額外的包</b></p><p>  完成上面的步

72、驟之后,你可以通過在命令行輸入“pear”來運(yùn)行PEAR的包管理器。增加新的模塊非常容易,只需要執(zhí)行“pear packagename”就可以了。你不需要安裝DB模塊,因?yàn)樵诎惭b包管理器的時(shí)候它已經(jīng)默認(rèn)安裝了。</p><p>  不過如果你運(yùn)行的是Windows XP Home ,需要執(zhí)行下面的步驟來安裝PEAR DB:</p><p>  C:\>cd c:\php</p&

73、gt;<p>  C:\>pear install DB</p><p>  C:\>pear list</p><p>  找出安裝PEAR包的版本,執(zhí)行pear list。這個(gè)命令返回一個(gè)列表,如圖9-6所示:</p><p>  圖9-6:安裝的PEAR包和版本列表</p><p>  一旦安裝完P(guān)EAR,我們

74、就可以開始使用它了。</p><p>  用PEAR重寫B(tài)ooks例子</p><p>  使用PEAR DB包的時(shí)候,執(zhí)行的步驟和使用PHP函數(shù)是類似。不過,函數(shù)的用法有細(xì)微的不同。我們會(huì)逐行解釋兩者的差別,如例9-7所示。</p><p>  例9-7:用PEAR DB 顯示books表</p><p><b>  1 <

75、?php</b></p><p><b>  2</b></p><p>  3 include('db_login.php');</p><p>  4 require_once('DB.php');</p><p><b>  5</b></p&

76、gt;<p>  6 $connection = DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");</p><p><b>  7</b></p><p>  8 if (DB::isError($connection)){</p>

77、;<p>  9 die("Could not connect to the database: <br />".DB::errorMessage($connection));</p><p><b>  10 }</b></p><p><b>  11</b></p><p&g

78、t;  12 $query = "SELECT * FROM books NATURAL JOIN authors";</p><p>  13 $result = $connection->query($query);</p><p><b>  14</b></p><p>  15 if (DB::isError

79、($result)){</p><p>  16 die("Could not query the database:<br />$query ".DB::errorMessage($result));</p><p><b>  17 }</b></p><p><b>  18</b>&

80、lt;/p><p>  19 echo('<table border="1">');</p><p>  20 echo '<tr><th>Title</th><th>Author</th><th>Pages</th></tr>';&l

81、t;/p><p><b>  21</b></p><p>  22 while ($result_row = $result->fetchRow( )) {</p><p>  23 echo "<tr><td>";</p><p>  24 echo $result_ro

82、w[1] . '</td><td>';</p><p>  25 echo $result_row[4] . '</td><td>';</p><p>  26 echo $result_row[2] . '</td></tr>';</p><p>

83、;<b>  27 }</b></p><p><b>  28</b></p><p>  29 echo("</table>");</p><p>  30 $connection->disconnect( );</p><p><b>  31&

84、lt;/b></p><p><b>  32 ?></b></p><p>  例9-7顯示的效果如圖9-7所示。</p><p>  圖9-7:使用PEAR DB的函數(shù)不影響輸出</p><p>  注意圖9-7跟圖9-4完全一致。</p><p>  第3行沒有變化,包括數(shù)據(jù)庫登

85、錄信息:</p><p>  include('db_login.php');</p><p>  第4行增加了一個(gè)新的require語句:</p><p>  require_once( "DB.php" );</p><p>  這行語句包含DB.php,這個(gè)文件提供了PEAR DB函數(shù)。如果沒有找到D

86、B.php文件,函數(shù)require_once會(huì)終止代碼并返回錯(cuò)誤。同時(shí)也可以避免同一個(gè)文件被包含兩次,一個(gè)文件被多次包含也會(huì)導(dǎo)致問題。</p><p><b>  創(chuàng)建連接示例</b></p><p>  DB.php文件定義了類DB。參考第5章有關(guān)使用類和對(duì)象的更多信息。我們將會(huì)主要使用這個(gè)類提供的方法。類DB有一個(gè)connect方法,我們會(huì)使用它來替換前面使用的c

87、onnect函數(shù)mysql_connect。雙冒號(hào)(::)表示調(diào)用類的函數(shù),如第6行所示。</p><p>  $connection = DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");</p><p>  當(dāng)調(diào)用connect函數(shù)的時(shí)候,它出創(chuàng)建一個(gè)新的數(shù)據(jù)庫連接,保存在變

88、量$connection中。Connect函數(shù)試圖通過傳遞給它的連接字符串來連接數(shù)據(jù)庫。</p><p><b>  連接字符串</b></p><p>  連接字符串使用新的格式來表示登錄信息,這些信息我們已經(jīng)通過單獨(dú)的域提供:</p><p>  dbtype://username:password@host/database</p&

89、gt;<p>  這個(gè)格式看起來也許會(huì)有些熟悉,它跟Windows的文件共享所使用的連接字符串非常相似。字符串的第一部分phptype是將PEAR函數(shù)與一般PHP函數(shù)區(qū)分開來的關(guān)鍵部分。Phptype域指定要連接的數(shù)據(jù)庫類型,支持的數(shù)據(jù)庫包括ibase、mysql、mssql、mysql、oci8、odbc、pgsql、和sybase。如果需要使用不同類型的數(shù)據(jù)庫,你的PHP代碼只需要修改phptype.</p>

90、;<p>  其他的域username、password、host和database跟基本的PHP connect類似。只有連接類型是必需的,不過通常要指定所有的域。</p><p>  代入了db_login.php中的數(shù)值之后,連接字符串如下所示:</p><p>  "mysql://test:test@localhost/test"</p&g

91、t;<p>  如果第6行的連接方法調(diào)用成功,就會(huì)創(chuàng)建一個(gè)DB對(duì)象。它包含訪問數(shù)據(jù)庫的方法和數(shù)據(jù)庫連接的所有狀態(tài)信息。</p><p><b>  查詢</b></p><p>  DB對(duì)象包含的一個(gè)方法是query。Query方法跟PHP的query函數(shù)非常類似,都接受一個(gè)SQL語句作為參數(shù)。區(qū)別是要使用箭頭(->)來通過對(duì)象調(diào)用函數(shù),并且它返回

92、的結(jié)果是另外一個(gè)對(duì)象而不是結(jié)果集。</p><p>  $query = "SELECT * FROM books"</p><p>  $result = $connection->query($query);</p><p>  這個(gè)代碼在連接對(duì)象上調(diào)用query函數(shù),執(zhí)行SQL查詢,返回結(jié)果對(duì)象$result.</p>

93、<p><b>  取結(jié)果</b></p><p>  第22行在結(jié)果對(duì)象上調(diào)用方法fetchRow。與mysql_fetch_row類似,這個(gè)方法一次返回一行數(shù)據(jù):</p><p>  while ($result_row = $result->fetchRow( )) {</p><p>  echo 'Title:

94、 '.$result_row[1] . '<br />';</p><p>  echo 'Author: '.$result_row[4] . '<br /> ';</p><p>  echo 'Pages: '.$result_row[2] . '<br /><b

95、r />';</p><p><b>  }</b></p><p>  使用一個(gè)while循環(huán)并調(diào)用fetchRow來遍歷所有行,直到fetchRow返回FALSE。</p><p>  循環(huán)內(nèi)的代碼跟未使用PEAR的例子中的代碼一致。</p><p><b>  關(guān)閉</b><

96、;/p><p>  第30行結(jié)束數(shù)據(jù)庫連接,它使用的是DB對(duì)象的disconnect方法:</p><p>  $connection->disconnect( );</p><p><b>  PEAR錯(cuò)誤報(bào)告</b></p><p>  函數(shù)DB::isError會(huì)檢查返回的結(jié)果是不是個(gè)錯(cuò)誤。如果是,可以使用DB:

97、:errorMessae得到錯(cuò)誤對(duì)應(yīng)的文字描述。你需要將函數(shù)的返回值傳遞給DB::errorMessage作為參數(shù)。</p><p>  下面使用PEAR代碼重寫錯(cuò)誤檢查:</p><p><b>  <?php</b></p><p>  if ( DB::isError( $demoResult = $db->query( $s

98、ql)))</p><p><b>  {</b></p><p>  echo DB::errorMessage($demoResult);</p><p><b>  } else</b></p><p><b>  {</b></p><p>  

99、while ($demoRow = $demoResult->fetchRow( ))</p><p><b>  {</b></p><p>  echo $demoRow[2] . '<br />';</p><p><b>  }</b></p><p>&l

100、t;b>  }</b></p><p><b>  ?></b></p><p>  PEAR數(shù)據(jù)庫接口還提供了一個(gè)新版本叫做PEAR::MDB2。例9-6給出了使用MDB2版本重寫同一個(gè)例子的代碼。</p><p>  例9-8:使用PEAR::MDB2顯示表books</p><p><

101、b>  <?php</b></p><p>  include('db_login.php');</p><p>  require_once('MDB2.php');</p><p>  //Translate our database login information into an array.<

102、/p><p>  $dsn = array(</p><p>  'phptype' => 'mysql',</p><p>  'username' => $username,</p><p>  'password' => $password,</p>

103、;<p>  'hostspec' => $host,</p><p>  'database' => $database</p><p><b>  );</b></p><p>  //Create the connection as an MDB2 instance.</p&

104、gt;<p>  $mdb2 = MDB2::factory($dsn);</p><p>  if (PEAR::isError($mdb2)) {</p><p>  die($mdb2->getMessage( ));</p><p><b>  }</b></p><p>  //Set th

105、e fetchmode to field associative.</p><p>  $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);</p><p>  $query = "SELECT * FROM books NATURAL JOIN authors";</p><p>  $result =$m

106、db2->query($query);</p><p>  if (PEAR::isError($result)){</p><p>  die("Could not query the database:<br />$query ".$result->getMessage( ));</p><p><b>  

107、}</b></p><p>  //Display the results.</p><p>  echo('<table border="1">');</p><p>  echo '<tr><th>Title</th><th>Author</

108、th><th>Pages</th></tr>';</p><p>  //Loop through the result set.</p><p>  while ($row = $result->fetchRow( )) {</p><p>  echo "<tr><td>&

109、quot;;</p><p>  echo htmlentities($row['title']) . '</td><td>';</p><p>  echo htmlentities($row['author ']) . '</td><td>';</p><

110、p>  echo htmlentities($row['pages']) . '</td></tr>';</p><p><b>  }</b></p><p>  echo("</table>");</p><p>  //Close the con

111、nection.</p><p>  $result->free( );</p><p><b>  ?></b></p><p>  我們得到同樣的顯示結(jié)果。這個(gè)版本的PEAR數(shù)據(jù)庫抽象提供了更多的函數(shù)。</p><p>  現(xiàn)在我們掌握了連接數(shù)據(jù)庫的方法以及PEAR提供的各種函數(shù)。</p>

112、<p><b>  原文: </b></p><p>  Getting PHP to Talk to MySQl</p><p>  Now that you’re comfortable using the MySQL client tools to manipulate data in the database, you can begin

113、using PHP to display and modify data from the database. PHP has standard functions for working with the database.First, we’re going to discuss PHP’s built-in database functions. We’ll also show you how to use the The PHP

114、 Extension and Application Repository (PEAR) database</p><p>  functions that provide the ability to use the same functions to access any supported database. This type of flexibility comes from a process cal

115、led abstraction. In programming interfaces, abstraction simplifies a complex interaction. It works by</p><p>  removing any nonessential parts of the interaction, allowing you to concentrate on the important

116、 parts. PEAR’s DB classes are one such database interface abstraction. The information you need to log into a database is reduced to the bare minimum. This standard format allows you to interact with MySQL, as well as ot

117、her databases using the same functions. Similarly, other MySQL-specific functions are replaced with generic ones that know how to talk to many databases. For example, the MySQL-specifi</p><p>  mysql_connect

118、($db_host, $db_username, $db_password);</p><p>  versus PEAR’s DB connect function:</p><p>  $connection = DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");</p

119、><p>  The same basic information is present in both commands, but the PEAR function also specifies the type of databases to which to connect. You can connect to MySQL or other supported databases. We’ll discus

120、s both connection methods in detail.</p><p>  In this chapter, you’ll learn how to connect to a MySQL server fromPHP, how to use PHP to access and retrieve stored data, and how to correctly display informati

121、on to the user.</p><p>  The Process</p><p>  The basic steps of performing a query, whether using the mysql command-line tool or PHP, are the same:</p><p>  ? Connect to the databa

122、se.</p><p>  ? Select the database to use.</p><p>  ? Build a SELECT statement.</p><p>  ? Perform the query.</p><p>  ? Display the results.</p><p>  We’l

123、l walk through each of these steps for both plain PHP and PEAR functions.</p><p><b>  Resources</b></p><p>  When connecting to a MySQL database, you will use two new resources. The

124、first is the link identifier that holds all of the information necessary to connect to the database for an active connection. The other resource is the results resource. It contains all information required to retrieve r

125、esults from an active database query’s result set. You’ll be creating and assigning both resources in this chapter.</p><p>  Querying the Database with PHP Functions</p><p>  In this section, we

126、 introduce how to connect to a MySQL database with PHP. It’s quite simple, and we’ll begin shortly with examples, but we should talk briefly about what actually happens. When you try connecting to a MySQL database, the M

127、ySQL server authenticates you based on your username and password. PHP handles connecting</p><p>  to the database for you, and it allows you to start performing queries and gathering data immediately.</p

128、><p>  As in Chapter 8, we’ll need the same pieces of information to connect to the database:</p><p>  ? The IP address of the database server</p><p>  ? The name of the database</p

129、><p>  ? The username</p><p>  ? The password</p><p>  Before moving on, make sure you can log into your database using the MySQL command-line client.</p><p>  Figure 9-1

130、shows how the steps of the database interaction relate to the two types of resources. Building the SELECT statement happens before the third function call, but it is not shown. It’s done with plain PHP code, not a MySQL-

溫馨提示

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

評(píng)論

0/150

提交評(píng)論