狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

PHP腳本數據庫功能詳解

admin
2012年3月27日 22:41 本文熱度 2692
  在當前互聯網發展迅速、電子商務網站層出不窮的形勢下,對網站開發的效率和質量提出了越來越高的要求。

  對于大型和結構復雜、內容繁多的網站,都要實現網站的動態化和方便的管理。數據管理離不開數據庫系統的支持。而衡量一種CGI語言的重要標志,就是它對后臺數據庫的訪問能力、效率等。

  而目前流行的PHP腳本語言,它的新特性給我們帶來了新的感覺。它支持以面向對象的方式進行設計開發。同時,為了滿足網頁獨特的需要,用模板、XML支持等帶來了網站開發的新方法。在語言結構上,PHP具有類似于C++語言的結構,并引入了類的概念,簡化了開發。

  PHP還具有強大的數據庫支持能力。我們這里就通過實例,首先介紹PHP訪問數據庫的一般流程,然后通過文件的數據庫存儲介紹PHP訪問數據庫的一種高級應用。最后通過數據庫類的使用實例,介紹真正實用高效的數據庫開發方法。

 
  圖1

  PHP數據庫功能簡介
  PHP提供對10余種常見數據庫的支持,如Oracle、dBase、Informix、SQL Server、Sysbase、MySQL等。正是由于廣泛的數據庫支持,才拓展了PHP的應用范圍, 使得各種應用都可以利用PHP進行開發。

  在各種數據庫中,MySQL由于其免費、跨平臺、使用方便、訪問效率較高,獲得了很大的應用。很多中心型網站都使用PHP+MySQL這一最佳搭檔。

  Oracle是典型的大型數據庫應用系統。如果你設計的網站數據量大,性能、效率要求高的話,Oracle是個不錯的選擇。

  在Win32平臺上,SQL Server占有較大的市場。PHP可以訪問SQL Server。

  PHP對各種數據庫的訪問方法進行封裝,針對不同數據庫系統的函數也很相似,增加了使用的方便性。

  下面,我們將以一個簡單的人才信息交流中心(見圖1)為例子,編程實現個人簡歷的在線提交、瀏覽等功能,講述PHP數據庫操作的全過程。數據庫采用最常用的MySQL數據庫。

  PHP數據庫操作基本步驟
  我們將在本地機器創建名為ResumeDB的數據庫,數據庫中有名為Resume的表。表中存儲個人簡歷的編號、人員名稱、個人簡介,以及Word格式的簡歷文件等。

  1.數據庫的創建

  切換至/usr/local/mysql/bin目錄,在命令行,執行以下語句創建數據庫:

  ./mysqladmin-u root-p create ResumeDB

  Enter password:

  在提示后輸入密碼。如果數據庫是第一次使用,默認的密碼為空,直接回車即可。

  然后創建保存個人簡歷的表。

  創建文本文件Resume.sql,內容如下:

   use ResumeDB;

  CREATE TABLE Resume (

   ID tinyint(4) NOT NULL auto_increment,

   Name varchar(10) NOT NULL,

   Intro varchar(255),

   ResuFile longblob,

   PRIMARY KEY (ID),

   KEY ID (ID)

  );

  將其放到My的可執行目錄/usr/local/mysql/bin下,執行如下命令:

  ./mysql-u root-p〈 Resume.sql

   Enter password:

  輸入數據庫密碼后,表Resume自動創建成功。其中,ResuFile字段為longbolb型,用來存儲二進制的Word文檔。

  2.數據庫訪問流程

  PHP對數據庫的訪問一般包括下列步驟:連接數據庫系統→選擇數據庫→執行SQL語句→關閉結果集→關閉數據庫連接→結束。

  (1) 連接數據庫

  連接數據庫是建立用戶程序到數據庫系統的對話通道的過程。連接MySQL數據庫的語句如下:

  〈?

  $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!");

  ?〉

  其中,函數mysql_connect()用于與數據庫服務器建立連接。三個參數分別為:數據庫服務器的主機名(也可以是IP)、數據庫用戶名和用戶密碼。函數返回值用于表示這個數據庫連接。

  從這個命令可以看到,我們可以指定并非本機的機器名作為數據庫服務器。這樣,就為數據的異地存放、數據庫的安全隔離提供了可能。外界用戶往往具有WWW服務器的直接訪問權限,如果數據庫系統直接放置在WWW服務器上,就可能會帶來安全隱患。而如果將數據庫系統放置于一臺防火墻后面的計算機上,PHP可以通過局域網訪問數據庫,而局域網內部的計算機對外部是不可見的。這樣,就保證了數據庫不受外來攻擊的可能。

  函數前面的“@”符號,用于限制這個命令的出錯信息的顯示。如果函數調用出錯,將執行or后面的語句。die( )函數表示向用戶輸出引號中的內容后,程序終止執行。這樣做是為了防止數據庫連接出錯時,用戶看到一堆莫名其妙的專業名詞,而是提示定制的出錯信息。不過在調試的時候,我們還是可以不要屏蔽出錯信息,免得出錯后,難以找到到底哪里有問題。

  (2) 數據庫選擇

  一個數據庫系統可以包含多個數據庫。在建立了和數據庫服務器的連接后,我們就要告訴系統,我們將要用到的數據庫是哪個。選擇數據庫的命令如下:

  〈?

  @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!");

  ?〉

  選擇數據庫時,要提供的參數是數據庫的名稱、和服務器連接號。

  當我們只使用一臺數據庫服務器時,$LinkID可以省略,系統自動查找最近的一個數據庫連接然后使用它。但是,當你要實現大型站點的時候,必不可少的要遇到多主機、多數據庫系統的情況。這時,數據庫連接參數就不能省略了。

  (3) 數據庫訪問

  好了,我們已經建立了到數據庫的連接,選定了數據庫,接下了來的一切就是執行SQL語句了。SQL語句的易用而強大的功能,將完成我們絕大部分的數據庫操作動作。

  我們可以首先向數據庫里寫入一條個人信息記錄,然后把它顯示出來。

  〈?

  $Name= "OpenBall"; //實際操作中,$Name、$Intro為從瀏覽器表單傳來的值

  $Intro = "OpenBall的個人簡介……";

  $query = "insert into Resume(Name,Intro) values('$Name', '$Intro')"; //生成SQL語句

  $result = @mysql_query("$query",$LinkID); //執行

  if(! $result)

   echo "數據插入失敗!";

  $query= "select ID,Name,Intro from Resume"; //生成SQL語句

  $result = mysql_query($query,$LinkID); //執行,結果集保存到變量$result中

  $num= mysql_num_rows($result); //取得查詢返回的記錄行數

  if($num == 0)

  {

   echo "沒有找到任何記錄";

   exit();

  }

  while($row=mysql_fetch_array($result)) //取結果集的下一行數據到數組$row中

  {

   echo $row["ID"]." ".$row["Name"]." ".$row["Intro"]."〈br〉";

  //以字段名為索引訪問數組變量的值

  }

  ?〉

  上面的操作,共執行了兩次數據庫操作。第一次為插入操作,第二次為查詢操作。程序首先插入當前用戶的一天記錄,然后,顯示所有數據庫中的個人情況。

  (4)資源釋放

  操作的最后,是釋放結果集,釋放結果集和數據庫連接資源。

  〈?

  @mysql_free_result($result);

  @mysql_close($LinkID);

  ?〉

  如果在多個網頁中都要頻繁進行數據庫訪問,則可以建立與數據庫服務器的持續連接來提高效率。因為每次與數據庫服務器的連接需要較長的時間和較大的資源開銷,持續的連接相對來說會更有效。

  建立持續連接的方法,就是在數據庫連接的時候,調用函數mysql_pconnect()代替mysql_connect() 。建立的持續連接在本程序結束時,不需要調用mysql_close()來關閉。下次程序在此執行mysql_pconnect()時,系統自動直接返回已經建立的持續連接的ID號,而不再去真的連接數據庫。
  利用PHP將文件保存到數據庫
  數據庫是數據組織、存儲的中心。將要處理的也可能是各種數據,包括程序、文件、報表,甚至音頻、視頻數據。由于通過瀏覽器,個人用戶只能填寫少部分的個人簡歷。因此,我們這里示范用戶個人簡歷上載的功能。其他類型的數據可以模仿此例進行操作。

  首先是信息收集頁面。讓用戶選擇要上載的文件。此頁面的html代碼如下:

  〈!-- begin of post.htm--〉

  〈p〉 〈/p〉

  〈form method="POST" action="insert.php" ENCTYPE="multipart/form-data"〉

  〈p〉〈b〉個人簡歷提交〈/b〉〈/p〉

  〈p〉姓名:〈br〉

  〈input type="text" name="Name" size="20"〉〈/p〉

  〈p〉個人簡介:〈br〉

  〈textarea rows="2" name="Intro" cols="20"〉〈/textarea〉〈/p〉

  〈p〉簡歷文件:〈br〉

  〈input type="file" name="ResuFile"〉〈/p〉

  〈p〉〈input type="submit" value="提交" name="B1"〉〈/p〉

  〈/form〉

  〈!-End of post.htm--〉

  注意,ENCTYPE關鍵字一定不能省,否則文件無法正確上載。

  這里,我們再把向數據庫插入記錄的代碼重新設計:

  〈?

  //begin of file insert.php

  if($ResuFile != "none")

  //確定用戶選擇了文件

  {

  $Size = filesize($ResuFile);

  //確定文件大小

  $mFileData = addslashes(fread(fopen($ResuFile, "r"), $Size));

  //讀取文件,對內容進行處理

  unlink($ResuFile);

  //刪除上載臨時文件

  }

  $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!");

  $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!");

  $query = "insert into Resume(Name,Intro,ResuFile) values('$Name', '$Intro', '$mFileData')";

  $result = @mysql_query("$query",$LinkID); //執行查詢,插入文件到數據庫

  if(! $result)

   echo "數據插入失敗!";

  else

   echo "文件上載成功!";

  @mysql_close($LinkID);

  //end of file insert.php

  ?〉

  有了上面的基礎,寫出從數據庫讀數據的程序應該很簡單了。需要注意的是文件向客戶發送的方法。服務器必須向瀏覽器發送頭信息,說明將要發送的數據為word文檔。如果用戶計算機裝有MSWord,瀏覽器將自動調用word進行文檔顯示。

  我們可以設置一個超級鏈接,來下載這個Word文件:

  〈?

  //begin of file show.php

  $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!");

  $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!");

  $query = "insert into Resume(Name,Intro,ResuFile) values('$Name', '$Intro', '$mFileData')";

  $result = @mysql_query("$query",$LinkID);

  //執行查詢,插入文件到數據庫

  $query= "select ID,Name,Intro from Resume";

  //生成SQL語句

  $result = mysql_query($query,$LinkID); //執行,結果集保存到變量$result中

  $num= mysql_num_rows($result); //取得查詢返回的記錄行數

  if($num == 0)

  {

   echo "沒有找到任何記錄";

   exit();

  }

  while($row=mysql_fetch_array($result)) //取結果集的下一行數據到數組$row中

  {

   echo $row["ID"]." ".$row["Name"]." ".$row["Intro"]." ";

   echo "〈a href= \"download.php?ID=".$row["ID"]."\"〉查看Word文檔〈/a〉〈br〉";

  }

  //end of file show.php

  ?〉

  訪問文件show.php,用戶看到的是個人簡要信息的列表。點擊“查看Word文檔”,即可看到對應成員詳細的個人簡歷。

  Word文檔的顯示是用下面的文件:

  〈?

  // begin of file download.php

  $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!");

  $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!");

  $query = "select ResuFile from Resume where ID=$ID";

  //$ID為調用傳遞的變量

  $result = @mysql_query("$query",$LinkID);

  //執行查詢,從數據庫讀取文件內容

  if(mysql_num_rows($result) 〈 1 )

  {

   echo "沒有找到相應的文件!";

   exit();

  }

  $row = mysql_fetch_array($result);

  $mFileData = $row["ResuFile"];

  //讀取個人簡歷的內容(Word文件格式的數據)

  header("Content-type: application/msword");

  //發送頭信息,說明將要發送的數據為word文檔

  echo $mFileData;

  //發送文檔數據

  //end of file download.php

  ?〉

  至此,我們已經實現了個人簡歷的提交、數據庫存儲、信息瀏覽等功能,基本完成了“人才信息交流”的框架功能。

  需要說明的是,通過PHP進行文件上載及數據庫存儲是個較突出的技術難題。很多關于PHP的網站都不斷出現這類問題。這些操作,對平臺、環境設置依賴性較大。不同的平臺配置,都可能導致操作的失敗。本文后面附了上述程序的運行平臺、編譯參數,以供參考。
  用類加快PHP的數據庫開發
  數據庫的訪問函數較多,使用不當會降低效率,甚至導致錯誤。而PHP的本身就是開放的和可擴充的,很多人為它開發各種功能的源代碼。每一個PHP程序員都應該善于繼承他人的成果,節省時間和精力。站在巨人的肩膀上,才能看得更遠。當然,你也可以把你的代碼共享出來,體會自己的勞動被承認和創造價值而帶來的成就感。

  使用數據庫類,可以使我們完全不必考慮具體的數據庫類型,而專注于程序的開發上。

  眾多的開發工具包中,PHPLib是性能較穩定、功能較完善的一個。PHPLib可以在http://phplib.netuse.de/ 獲得。它包含了數據庫的支持類。以MySQL數據庫為例,PHPLib自帶名為DB_Sql的類。它包裝了數據庫的連接、查詢、取結果、數據庫表的遍歷等功能。

  使用數據庫類,可以使我們完全不必考慮具體的數據庫類型,而專注于程序的開發上。即使數據庫系統類型換了,程序代碼也不用改。同時,數據庫類提供了完整而健壯的數據庫訪問方法,這可能是使用類的包裝的最大的優勢了。
  下面,我們就使用PHPLib提供的數據庫類,來訪問我們剛才建立的數據庫,并對內容進行顯示。

  〈?

  require "db_mysql.php";

  //包含數據庫類的生成文件

  $db=new DB_Sql;

  //聲明數據庫類的實例

  $db-〉connect("ResumeDB","localhost", "root", "");

  //連接數據庫服務器

  //提供的參數依次為:數據庫名,主機名,用戶名,用戶密碼

  if ($db-〉Link_ID)

  //判斷是否正確建立連接

  {

   $db-〉query("select ID,Name,Intro FROM Resume");

  //查詢

   if ($db-〉nf())

  //判斷結果集是否為空

   {

   while ($db-〉next_record())

  //取得下一行記錄值,直到記錄集內容取完

   {

   echo "ID:", $db-〉f("ID"); //f()函數返回當前記錄某個子段的值

   echo "〈br〉";

   echo "姓名:";

   $db-〉p("Name");

  //p()函數直接打印某個子段的值

  //等價于echo $db-〉f("name")

   echo "〈br〉";

   echo "簡介:";

   echo $db-〉f("Intro");

   echo "〈br〉";

   echo "〈a href= \"download.php?ID=".$db-〉f("ID")."\"〉查看Word文檔〈/a〉";

   echo "〈br〉〈hr〉";

   }

   }

   $db-〉free ();

  //釋放資源

  }

  ?〉

  從上面的流程可以看出,用類訪問數據庫的方法和直接訪問數據庫的方法基本相同。不同的是,這里我們調用的方法都是類的方法,而不是具體針對某種數據庫的函數。由于代碼和具體數據庫類型的分離,使得當數據庫系統改變的時候,我們不用改變程序代碼,只要改變基類的實現方法即可。

  如果結合使用PHPLib模板進行設計的話,即可實現程序與顯示的分離。也將使得程序結構清晰,網頁美工設計制作方便。

  簡便的用法、合理的任務分配、合乎思維的對象包裝,將使得網站開發效率大大提高。

  附:代碼測試平臺
  以上程序代碼全部在下面的平臺測試通過

  RedHat Linux 6.1+Apache1.3.12+

  PHP4.0+MySql3.22.32

  數據庫的安裝配置過程為:

   cd /usr/local/src/mysql*

   ./configure --refix=/usr/local/mysql

   make

   make install

  Apache的安裝配置過程為:

   cd /usr/local/src/apache*

   ./configure --prefix=/usr/local/apache --enable-shared=max

   make

   make install

  PHP的安裝配置過程為:

   cd /usr/local/src/php*

   ./configure --with-apxs=/usr/local/apache/bin/apxs \

  --with-config-file-path=/usr/local/

  apache/conf \

  --with-mysql=/usr/local/mysql \

  --enable-debug=no \

  --enable-track-vars

  php.ini配置過程為:

   拷貝php.ini-dist到/usr/local/

  apache/conf/php.ini

   編輯httpd.conf,把下面兩行的注釋去掉

   AddType application/x-httpd-php .php .php3

   AddType application/x-httpd-php-source .phps

該文章在 2012/3/27 22:41:53 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved