<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP訪問MySQL 查詢:
               
          PHP訪問MySQL

                  現(xiàn)在你已經(jīng)可以熟練地使用MySQL客戶端軟件來操作數(shù)據(jù)庫里的數(shù)據(jù),我們也可以開始學(xué)習(xí)如何使用PHP來顯示和修改數(shù)據(jù)庫里的數(shù)據(jù)了。PHP有標(biāo)準(zhǔn)的函數(shù)用來操作數(shù)據(jù)庫。

                  我們首先學(xué)習(xí)PHP內(nèi)建的數(shù)據(jù)庫函數(shù),然后會學(xué)習(xí)PHP擴(kuò)展和應(yīng)用程序庫(PEAR,PHP Extension and Application Repository )中的數(shù)據(jù)庫函數(shù),我們可以使用這些函數(shù)操作所有支持的數(shù)據(jù)庫。這種靈活性源自于抽象。對于編程接口而言,抽象簡化了復(fù)雜的交互過程。它將交互過程中無關(guān)緊要的部分屏蔽起來,讓你關(guān)注于重要的部分。PEAR的DB類就是這樣一種數(shù)據(jù)庫接口的抽象。你登錄一個數(shù)據(jù)庫所需要提供的信息被減少到最少。這種標(biāo)準(zhǔn)的格式可以通過同一個函數(shù)來訪問MySQL以及其他的數(shù)據(jù)庫。同樣,一些MySQL特定的函數(shù)被更一般的、可以用在很多數(shù)據(jù)庫上的函數(shù)所替代。比如,MySQL特定的連接函數(shù)是:

                  mysql_connect($db_host, $db_username, $db_password);

                  而PEAR的DB提供的連接函數(shù)是:

                  $connection =

                  DB::connect("mysql://$db_username:$db_password@$db_host/$db_database"

                  );

                  兩個命令都提供了同樣的基本信息,但是PEAR的函數(shù)中還指定了要連接的數(shù)據(jù)庫的類型。你可以連接到MySQL或者其他支持的數(shù)據(jù)庫。我們會詳細(xì)討論這兩種

                  連接方式。

                  本章中,我們會學(xué)習(xí)如何從PHP連接到MySQL的服務(wù)器,如何使用PHP訪問數(shù)據(jù)

                  庫中存儲的數(shù)據(jù),以及如何正確的向用戶顯示信息。

                  無論是通過MySQL命令行工具,還是通過PHP,執(zhí)行一個查詢的基本步驟都是一樣的:

                  ? 連接到數(shù)據(jù)庫

                  ? 選擇要使用的數(shù)據(jù)庫

                  ? 創(chuàng)建SELECT語句

                  ? 執(zhí)行查詢

                  ? 顯示結(jié)果

                  我們將逐一介紹如何用PHP和PEAR的函數(shù)完成上面的每一步。

                  當(dāng)連接到MySQL數(shù)據(jù)庫的時候,你會使用到兩個新的資源。第一個是連接的標(biāo)識符,它記錄了一個活動連接用來連接到數(shù)據(jù)庫所必需的所有信息。另外一個資源是結(jié)果資源,它包含了用來從一個有效的數(shù)據(jù)庫查詢結(jié)果中取出結(jié)果所需要的所有信息。本章中我們會創(chuàng)建并使用這兩種資源。

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

                  ? 數(shù)據(jù)庫服務(wù)器的IP地址

                  ? 數(shù)據(jù)庫的名字

                  ? 用戶名

                  ? 密碼

                  在開始之前,首先使用MySQL的命令行客戶端確認(rèn)你登錄到數(shù)據(jù)庫。 圖9-1顯示了數(shù)據(jù)庫交互過程的各個步驟和兩種類型資源之間的關(guān)系。創(chuàng)建SELECT語句發(fā)生在第三個函數(shù)調(diào)用之前,但是在圖中沒有顯示出來。它是通過普通的PHP代碼,而不是MySQL特定的PHP函數(shù)完成的。使用數(shù)據(jù)庫時函數(shù)和資源之間的交互我們先創(chuàng)建一個文件,用來保存登錄MySQL所用到的信息。我們建議你把這些信息放在單獨(dú)的文件里然后通過include來使用這個文件。這樣一來如果你修改了數(shù)據(jù)庫的密碼。無論有多少個PHP文件訪問數(shù)據(jù)庫,你只需要修改這一個文件。

                  不用擔(dān)心有人會直接看到這個文件從而得到你的數(shù)據(jù)庫的登錄信息。如何被直接請求,這個文件會被當(dāng)作PHP文件處理,返回結(jié)果是一個空白頁。 假設(shè)這個文件的名字叫做db_login.php,并且它跟其他所用PHP文件放在同一個目錄下。這個文件的內(nèi)容如例9-1所示。

                  <?php

                  $db_host='hostname of database server';

                  $db_database='database name';

                  $db_username='username';

                  $db_password='password';

                  ?>

                  在例9-2中,我們創(chuàng)建的文件使用跟Web服務(wù)器放在同一臺機(jī)器上的數(shù)據(jù)庫,并指定的數(shù)據(jù)庫的名字,用戶名和密碼。

                  例9-2:db_login.php文件示例

                  <?php

                  $db_host='localhost';

                  $db_database='test';

                  $db_username='test';

                  $db_password='yourpass';

                  ?>

                  圖9-2顯示了如何在其他PHP文件中使用這個文件。我們會繼續(xù)使用在第七章中創(chuàng)建的數(shù)據(jù)庫。

                  圖9-2:在多文件中重復(fù)使用登錄信息 例9-3是精簡后的,用mysqldump命令得到的重建這個數(shù)據(jù)庫的SQL命令。

                  例9-3:重建測試數(shù)據(jù)庫的SQL語句 DROP TABLE IF EXISTS books;

                  CREATE TABLE books (

                  title_id int(11) NOT NULL auto_increment,

                  title varchar(150) default NULL,

                  pages int(11) default NULL,

                  PRIMARY KEY (title_id)

                  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

                  --

                  -- Dumping data for table books

                  --

                  INSERT INTO books VALUES (1,'Linux in a Nutshell',476),(2,'Classic Shell Scripting',256);

                  --

                  -- Table structure for table purchases

                  --

                  DROP TABLE IF EXISTS purchases;

                  CREATE TABLE purchases (

                  id int(11) NOT NULL auto_increment,

                  user varchar(10) default NULL,

                  title varchar(150) default NULL,

                  day date default NULL,

                  PRIMARY KEY (id)

                  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

                  --

                  -- Dumping data for table purchases

                  --

                  LOCK TABLES purchases WRITE;

                  INSERT INTO purchases VALUES (1,'Mdavis','Regular Expression Pocket

                  Reference','2005-02-15'),(2,'Mdavis','JavaScript & DHTML

                  Cookbook','2005-02-10');

                  如果你在第8章中沒有創(chuàng)建這些表,可以將例9-3中的代碼保存成文件backup.sql,然后在命令行執(zhí)行命令,命令格式如下:

                  mysql -u username -ppassword -D database_name < backup_file_name.sql

                  如果使用例子中的值,那么這個命令就是:

                  mysql -u test -pyourpass -D test < backup.sql

                  數(shù)據(jù)庫的名字叫test,它包含三個表,分別是books、authors和purchases。

                  每個表都有一些示例記錄。這些就足以讓我們開始使用PHP來進(jìn)行查詢了。

                  我們需要做的頭一件事情是連接數(shù)據(jù)庫,并且檢查連接是否確實建立起來。如例

                  9-4所示,通過include包含連接信息的文件,我們可以在調(diào)用mysql_connect

                  函數(shù)的時候使用這些變量而不是將這些值寫死在代碼中。我們使用一個叫做

                  db_test.php的文件,往其中增加這些代碼段。 例9-4:在db_test.php中包含連接參數(shù)和調(diào)用mysql_connect // Include our login information

                  include('db_login.php');

                  // Connect

                  $connection = mysql_connect($db_host, $db_username, $db_password);

                  if (!$connection){

                  die ("Could not connect to the database: <br />". mysql_error( ));

                  }

                  函數(shù)mysql_connect的參數(shù)是數(shù)據(jù)庫服務(wù)器主機(jī)、用戶名和密碼。如果連接成功,就會返回新建立的連接,如果不能建立連接就會返回FALSE。檢查這個函數(shù)的返回值來確保連接的確建立起來了。如果遇到問題,比如不正確的密碼,可以使用mysql_error打印一條友好的警告信息以及導(dǎo)致錯誤的原因。

                  不僅僅是打印一條錯誤信息,die()還會停止這個程序的執(zhí)行。對于大部分?jǐn)?shù)據(jù)庫驅(qū)動網(wǎng)頁來說,不能訪問數(shù)據(jù)庫就意味著網(wǎng)頁毫無用處。通過使用die來終止程序的執(zhí)行,可以避免用戶看到大量的錯誤信息。 請注意我們還沒有指定數(shù)據(jù)庫的名字。

                  你可能遇到的一個錯誤是:

                  Fatal error: Call to undefined function mysql_connect( ) in C:Program FilesApache Software FoundationApache2.2htdocsdb_test.php on line 4這個錯誤發(fā)生的原因是下載安裝的PHP5.x默認(rèn)沒有包括對MySQL的支持。解決這個問題需要將php_mysql.dll文件從PHP壓縮包例的ext/目錄復(fù)制到C:/php,

                  并修改C:WINDOWSphp.ini文件,確保下面兩行沒有被注釋掉(注釋的方法在行首使用分號)。

                  extension_dir = "c:/PHP/ext/"

                  extension=php_mysql.dll

                  這樣PHP擴(kuò)展的目錄就被設(shè)為C:PHP,MySQL的擴(kuò)展也會被使用。在編輯php.ini文件的時候,你可以使用編輯器的搜索功能來檢查這兩行是否已經(jīng)存在,只是需要去掉注釋,并且需要重新輸入。

                  重新啟動Apache,這樣MySQL的支持就會被打開了。

                  建立連接之后,下一步就是使用mysql_select_db來選擇我們要用的數(shù)據(jù)庫。它的參數(shù)有兩個:數(shù)據(jù)庫名和可選的數(shù)據(jù)庫連接。如果不指定數(shù)據(jù)庫連接,默認(rèn)使

                  用上一條mysql_connect所建立的連接。

                  // Select the database

                  $db_select=mysql_select_db($db_database);

                  if (!$db_select)

                  {

                  die ("Could not select the database: <br />". mysql_error( ));

                  }

                  同樣的,每次訪問數(shù)據(jù)庫的時候最好能檢查可能的錯誤并且進(jìn)行顯示。

                  雖然可以在同一個腳本里多次調(diào)用mysql_select_db,但這不是一個好習(xí)慣。

                  現(xiàn)在我們做好了一切準(zhǔn)備工作,可以開始執(zhí)行SQL查詢了。

                  構(gòu)建SQL查詢非常容易就是將一個字符串賦值給變量。這個字符串就是我們的

                  SQL查詢,當(dāng)然我們要給出有效的SQL查詢,否則執(zhí)行這個查詢的時候MySQL會返回錯誤。我們使用$query作為變量名,這個名字對應(yīng)其目的,你也可以選擇任何你喜歡的變量名。這個例子中的SQL查詢是”SELECT * FROM books”。

                  跟使用mysql命令行客戶端不同,這里的查詢不需要以分號結(jié)尾。 你可以使用字符串連接操作符(.)來構(gòu)建查詢: // Assign the query

                  $select = ' SELECT ';

                  $column = ' * ';

                  $from = ' FROM ';

                  $tables = ' books ';

                  $where = ' NATURAL JOIN authors';

                  $query = $select.$column.$from.$tables.$where;

                  這個版本的代碼比下面的代碼要靈活多了:

                  // Assign the query

                  $query = "SELECT * FROM books NATURAL JOIN authors";

                  查詢字符串也可以在WHERE子句中使用變量來限定返回什么樣的行,這些變量可能是用戶信息,也可能是來自其他的查詢。

                  現(xiàn)在我們已經(jīng)將查詢賦值給了一個變量,下一步就是執(zhí)行它。

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

                  // Execute the query

                  $result = mysql_query( $query );

                  if (!$result){

                  die ("Could not query the database: <br />". mysql_error( ));

                  }

                  當(dāng)數(shù)據(jù)庫查詢的時候,所有的結(jié)果構(gòu)成一個結(jié)果集。這些結(jié)果跟使用mysql命令行客戶端執(zhí)行同樣查詢所得到的行一致。要顯示這些結(jié)果,你需要依次處理這些行。

                  使用mysql_fetch_row從結(jié)果集中取出一行,它的用法如下:

                  array mysql_fetch_row ( resource $result);

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

                  // Fetch and display the results

                  while ($result_row = mysql_fetch_row(($result))){

                  echo 'Title: '.$result_row[1] . '<br />';

                  echo 'Author: '.$result_row[4] . '<br /> ';

                  echo 'Pages: '.$result_row[2] . '<br /><br />';

                  }

                  結(jié)果行的所有列都保存在一個數(shù)組里,可以方便地進(jìn)行訪問。變量$result_row[2]訪問結(jié)果行的第二個屬性(數(shù)組的順序是查詢是定義的列的順序,如果使用SELECE * ,那么數(shù)組順序就是表的列的順序)。

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

                  用mysql_fetch_array加上MYSQL_ASSOC的方式重寫上面的代碼,如下所示:

                  // Fetch and display the results

                  while ($result_row = mysql_fetch_array($result, MYSQL_ASSOC)){

                  echo 'Title: '.$result_row['title'] . '<br />';

                  echo 'Author: '.$result_row['author'] . '<br /> ';

                  echo 'Pages: '.$result_row['pages'] . '<br /><br />';

                  }

                  絕大部分情況下,我們在使用完一個數(shù)據(jù)庫之后要關(guān)閉到它的連接。使用mysql_close來關(guān)閉一個數(shù)據(jù)庫,它會告訴PHP和MySQL這個數(shù)據(jù)庫連接已經(jīng)不再使用,所使用的所有資源和內(nèi)存都可以釋放。

                  mysql_close($connection)

                  PEAR是一個框架和可重用PHP組建的發(fā)布系統(tǒng),它為PHP開發(fā)提供了一套增強(qiáng)的功能,PEAR包括很多種模塊,用來處理從會話管理到購物車功能的幾乎所有事情。表9-1列出了現(xiàn)有的模塊種類。 表9-1:PEAR模塊種類

                  Authentication HTML Processing

                  Benchmarking HTTP Science

                  Caching Images Semantic Web

                  Configuration Internationalization Streams

                  Console Logging Structures

                  Database Mail System

                  Date/Time Math Test

                  Encryption Networking Tools and utilities

                  Event Numbers Validate

                  File formats Payment Web services

                  File system PEAR XML

                  GTK components PHP

                  我們的列表還不夠完整,可以訪問來獲得供下載的所有模塊。

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

                  在UNIX系統(tǒng)下,可以通過在shell(命令行)下執(zhí)行下面的命令來安裝包管理器:lynx -source | php

                  這個命令使用go-pear.org的輸出(實際就是PHP源代碼)來安裝PEAR,

                  go-pear.org的輸出被傳給php命令執(zhí)行。

                  安裝完P(guān)HP5后,會有一個PEAR安裝腳本C:phpgo-pear.bat。如果你在第二章沒有安裝所以文件,那么現(xiàn)在把所有的PHP文件都解壓到C:php下,然后執(zhí)行這個批處理文件。

                  如果你是通過MSI安裝程序安裝PHP,需要執(zhí)行下面的命令而不是使用go-pear.bat文件:php go-pear.phar如果PEAR目錄不存在,那就需要重新執(zhí)行PHP的MSI安裝程序,選擇Change選項,然后將“Extensions and Extras”設(shè)置成“Will be installed on local drive”。完畢后再執(zhí)行g(shù)o-pear.phar。 圖9-5顯示執(zhí)行PEAR安裝程序后的初始屏幕。

                  圖9-5:go-pear.bat安裝腳本

                  安裝程序會要求輸入幾個路徑,你可以使用默認(rèn)值。那樣安裝的最上級目錄就是c:php.

                  php.exe必須位于系統(tǒng)路徑中。在命令行輸入php.exe來確認(rèn)。如果沒有找到這個命令,那需要將它的路徑加到PATH變量中。要修改系統(tǒng)的PATH變量,選擇“開始—控制面板—系統(tǒng)—環(huán)境變量”,在PATH變量的后面增加一項C:php”。

                  PEAR安裝程序會創(chuàng)建文件C:phpPEAR_ENV.reg,雙擊該文件在注冊表中設(shè)置PEAR的路徑。這個文件的內(nèi)容視安裝的PEAR版本而定。當(dāng)彈出對話框要求確認(rèn)的時候,點(diǎn)擊OK將信息加入注冊表。

                  在執(zhí)行完這個批處理文件后,你可能需要編輯php.ini文件,將PEAR的目錄入到include_path中。Php.ini的447行看起來如下:

                  include_path = ".;c:phpincludes;c:phpPEAR"

                  Apache必須重啟才能使用DB包。

                  大部分人的ISP都安裝了PEAR DB。如果你的ISP沒有提供,可以要求他們安裝。你可以通過執(zhí)行例9-8中的代碼來判斷PEAR DB是否已經(jīng)安裝,如果沒有,那么在執(zhí)行這個腳本的時候“require_once(‘DB.php’)”這一行就會報錯。

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

                  C:>pear install DB

                  C:>pear list

                  找出安裝PEAR包的版本,執(zhí)行pear list。這個命令返回一個列表,如圖9-6

                  所示: 圖9-6:安裝的PEAR包和版本列表 一旦安裝完P(guān)EAR,我們就可以開始使用它了。 使用PEAR DB包的時候,執(zhí)行的步驟和使用PHP函數(shù)是類似。不過,函數(shù)的用法有細(xì)微的不同。我們會逐行解釋兩者的差別,如例9-7所示。

                  例9-7:用PEAR DB 顯示books表 1

                  <?php

                  2

                  3 include('db_login.php');

                  4 require_once('DB.php');

                  5

                  6 $connection =

                  DB::connect("mysql://$db_username:$db_password@$db_host/$db_database"

                  );

                  7

                  8 if (DB::isError($connection)){

                  9 die("Could not connect to the database: <br

                  />".DB::errorMessage($connection));

                  10 }

                  11

                  12 $query = "SELECT * FROM books NATURAL JOIN authors";

                  13 $result = $connection->query($query);

                  14

                  15 if (DB::isError($result)){

                  16 die("Could not query the database:<br />$query

                  ".DB::errorMessage($result));

                  17 }

                  18

                  19 echo('<table border="1">');

                  20 echo '<tr><th>Title</th><th>Author</th><th>Pages</th></tr>';

                  21

                  22 while ($result_row = $result->fetchRow( )) {

                  23 echo "<tr><td>";

                  24 echo $result_row[1] . '</td><td>';

                  25 echo $result_row[4] . '</td><td>';

                  26 echo $result_row[2] . '</td></tr>';

                  27 }

                  28

                  29 echo("</table>");

                  30 $connection->disconnect( );

                  31

                  32 ?>

                  例9-7顯示的效果如圖9-7所示。

                  圖9-7:使用PEAR DB的函數(shù)不影響輸出

                  注意圖9-7跟圖9-4完全一致。

                  第3行沒有變化,包括數(shù)據(jù)庫登錄信息:

                  include('db_login.php');

                  第4行增加了一個新的require語句:

                  require_once( "DB.php" );

                  這行語句包含DB.php,這個文件提供了PEAR DB函數(shù)。如果沒有找到DB.php文件,函數(shù)require_once會終止代碼并返回錯誤。同時也可以避免同一個文件被包含兩次,一個文件被多次包含也會導(dǎo)致問題。

                  DB.php文件可以在PHP發(fā)布的pear子目錄下找到。安裝PEAR的時候應(yīng)該已經(jīng)將這個路徑添加到pph.ini文件中的include_path了。如果找不到,應(yīng)該檢查PEAR DB是否正確安裝,以及路徑是否正確設(shè)置。

                  DB.php文件定義了類DB。參考第5章有關(guān)使用類和對象的更多信息。我們將會主要使用這個類提供的方法。類DB有一個connect方法,我們會使用它來替換前面使用的connect函數(shù)mysql_connect。雙冒號(::)表示調(diào)用類的函數(shù),如第6行所示。

                  $connection =

                  DB::connect("mysql://$db_username:$db_password@$db_host/$db_database"

                  );

                  當(dāng)調(diào)用connect函數(shù)的時候,它出創(chuàng)建一個新的數(shù)據(jù)庫連接,保存在變量$connection中。Connect函數(shù)試圖通過傳遞給它的連接字符串來連接數(shù)據(jù)庫。 連接字符串使用新的格式來表示登錄信息,這些信息我們已經(jīng)通過單獨(dú)的域提供:

                  dbtype://username:password@host/database

                  這個格式看起來也許會有些熟悉,它跟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.

                  其他的域username、password、host和database跟基本的PHP connect類似。只有連接類型是必需的,不過通常要指定所有的域。

                  代入了db_login.php中的數(shù)值之后,連接字符串如下所示:

                  "mysql://test:test@localhost/test"

                  如果第6行的連接方法調(diào)用成功,就會創(chuàng)建一個DB對象。它包含訪問數(shù)據(jù)庫的方法和數(shù)據(jù)庫連接的所有狀態(tài)信息。

                  DB對象包含的一個方法是query。Query方法跟PHP的query函數(shù)非常類似,都接受一個SQL語句作為參數(shù)。區(qū)別是要使用箭頭(->)來通過對象調(diào)用函數(shù),并且它返回的結(jié)果是另外一個對象而不是結(jié)果集。

                  $query = "SELECT * FROM books"

                  $result = $connection->query($query);

                  這個代碼在連接對象上調(diào)用query函數(shù),執(zhí)行SQL查詢,返回結(jié)果對象$result.

                  第22行在結(jié)果對象上調(diào)用方法fetchRow。與mysql_fetch_row類似,這個方法一次返回一行數(shù)據(jù):

                  while ($result_row = $result->fetchRow( )) {

                  echo 'Title: '.$result_row[1] . '<br />';

                  echo 'Author: '.$result_row[4] . '<br /> ';

                  echo 'Pages: '.$result_row[2] . '<br /><br />';

                  }

                  使用一個while循環(huán)并調(diào)用fetchRow來遍歷所有行,直到fetchRow返回FALSE。 循環(huán)內(nèi)的代碼跟未使用PEAR的例子中的代碼一致。

                  第30行結(jié)束數(shù)據(jù)庫連接,它使用的是DB對象的disconnect方法:

                  $connection->disconnect( );

                  函數(shù)DB::isError會檢查返回的結(jié)果是不是個錯誤。如果是,可以使用DB::errorMessae得到錯誤對應(yīng)的文字描述。你需要將函數(shù)的返回值傳遞給DB::

                  errorMessage作為參數(shù)。 下面使用PEAR代碼重寫錯誤檢查:

                  <?php

                  if ( DB::isError( $demoResult = $db->query( $sql)))

                  {

                  echo DB::errorMessage($demoResult);

                  } else

                  {

                  while ($demoRow = $demoResult->fetchRow( ))

                  {

                  echo $demoRow[2] . '<br />';

                  }

                  }

                  ?>

                  PEAR數(shù)據(jù)庫接口還提供了一個新版本叫做PEAR::MDB2。例9-6給出了使用MDB2版本重寫同一個例子的代碼。 例9-8:使用PEAR::MDB2顯示表books

                  <?php

                  include('db_login.php');

                  require_once('MDB2.php');

                  //Translate our database login information into an array.

                  $dsn = array(

                  'phptype' => 'mysql',

                  'username' => $username,

                  'password' => $password,

                  'hostspec' => $host,

                  'database' => $database

                  );

                  //Create the connection as an MDB2 instance.

                  $mdb2 = MDB2::factory($dsn);

                  if (PEAR::isError($mdb2)) {

                  die($mdb2->getMessage( ));

                  }

                  //Set the fetchmode to field associative.

                  $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);

                  $query = "SELECT * FROM books NATURAL JOIN authors"; $result =$mdb2->query($query);

                  if (PEAR::isError($result)){

                  die("Could not query the database:<br />$query

                  ".$result->getMessage( ));

                  }

                  //Display the results.

                  echo('<table border="1">');

                  echo '<tr><th>Title</th><th>Author</th><th>Pages</th></tr>'; //Loop through the result set.

                  while ($row = $result->fetchRow( )) {

                  echo "<tr><td>";

                  echo htmlentities($row['title']) . '</td><td>';

                  echo htmlentities($row['author ']) . '</td><td>'; echo htmlentities($row['pages']) . '</td></tr>';

                  }

                  echo("</table>");

                  //Close the connection.

                  $result->free( );

                  ?>

                  我們得到同樣的顯示結(jié)果。這個版本的PEAR數(shù)據(jù)庫抽象提供了更多的函數(shù)。

                  現(xiàn)在我們掌握了連接數(shù)據(jù)庫的方法以及PEAR提供的各種函數(shù)。

                  


          PHP二進(jìn)制加密與解密的解決辦法 PHP語法入門
          PHP平臺的缺陷如何成為PHP高手
          PHP入門學(xué)習(xí)基礎(chǔ)教程php主動加載
          PHP提高編程效率的方法 php基礎(chǔ)知識點(diǎn)總結(jié)
          PHP從零入門教程PHP內(nèi)核解密
          學(xué)習(xí)PHP的方法與技巧PHP7性能翻倍關(guān)鍵大揭秘
          如何遏制PHP木馬攻擊PHP編程教程Ajax完成分頁技巧
          MySQL讀寫分離由PHP實現(xiàn)談PHP生成靜態(tài)頁面
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價:
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 高潮喷水不止视频 | 高清无碍一区二区三区 | 欧美婷婷 | 91黄色操逼视频 | 思思久热| 成人麻豆日韩在无码视频 | 国产精品一卡二卡免费在线观看 | 日本一级色情片 | 三级在线先锋 | 亚洲AAA片 |