国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP腳本數據庫功能詳解(上)

2024-05-04 23:00:38
字體:
來源:轉載
供稿:網友
在當前互聯網發展迅速、電子商務網站層出不窮的形勢下,對網站開發的效率和質量提出了越來越高的要求。

  對于大型和結構復雜、內容繁多的網站,都要實現網站的動態化和方便的管理。數據管理離不開數據庫系統的支持。而衡量一種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數據庫的語句如下:

  〈?

  $[email protected]_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號,而不再去真的連接數據庫。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通河县| 许昌市| 乌鲁木齐市| 丹巴县| 阿拉尔市| 台山市| 门头沟区| 临漳县| 长垣县| 利津县| 四川省| 鹤庆县| 兰西县| 镇平县| 桓仁| 兴山县| 密山市| 黄梅县| 宁南县| 正安县| 江都市| 麻栗坡县| 洪洞县| 天峻县| 涡阳县| 上高县| 康定县| 晋宁县| 东丰县| 拉萨市| 年辖:市辖区| 霍林郭勒市| 庆元县| 红桥区| 高清| 汤阴县| 乌拉特后旗| 榆中县| 民县| 中卫市| 甘洛县|