麻辣家族討論版版's Archiver

小誌 發表於 2011-4-20 09:44

第8章 PHP與資料庫存取(8-1 查詢與取得資料)

經過上一章的洗禮,相信您對於資料庫與資料表已有基礎的認識,同時,您應該也已清楚的知道:要在PHP中連結Access資料庫或SQL Server可以透過odbc_connect()函數,而連結MySQL Server則可以使用專屬的mysql_connection()函數。

因為本書的主角之一為MySQL Server,所以後續章節將以使用MySQL Server專屬的mysql函數為學習重點。

mysql_connection()函數只負責連結資料庫,至於如何存取資料表內的資料可就派不上用場了,要存取資料必須靠mysql_query()、mysql_fetch_row()、mysql_fetch_field()等等函數。

本章內容皆以MySQL資料庫為使用對象,在範例光碟\DataBase目錄中有一個MySQL資料庫「Student」,檔案名稱為Students.sql,請您將檔案複製到您的硬碟裡並使用phpMyAdmin為工具將其載入到MySQL Server中,以方便您操作範例時使用。
[attach]5626[/attach]

小誌 發表於 2011-4-20 09:46

[color=DarkRed][size=4][b]8-1   查詢與取得資料[/b][/size][/color]
當我們建立與MySQL Server的連結後,第一件事情不是馬上急著提取資料,而是應該選取我們要使用的資料庫,要選取操作的資料庫可使用「mysql_select_db()」函數:
[color=Magenta]mysql_select_db() 函數[/color][code]int mysql_select_db ( string database_name [, int link_identifier])[/code]mysql_select_db()函數使用時需給定兩個參數:
1、database_name:指定我們要操作的資料庫名稱。
2、link_identifier:連線代號,mysql_select_db()函數只能指定操作哪個資料庫,並沒有連結資料庫的能力,因此,mysql_select_db()函數必須透過某個已建立並完成資料庫連結的「連線代號」,這個「連線代號」是由mysql_connect()函數所建立的,這個參數可以不指定,在mysql_query()函數執行時會自動找尋最近由mysql_connect()函數所建立的連線。

[color=Magenta]例如:[/color][code]<?
    $conn = mysql_connect("localhost", "root", "12345a");
    mysql_select_db("STUDENTS", $conn);
?>[/code]mysql_connect()函數好用的地方在於:欲連上的資料庫伺服器參數內容可以是我們設定的DNS、資料庫伺服器名稱,設置是資料庫伺服器的IP、電腦名稱,如上例中的「localhost」。(IP位址「127.0.0.1」與「localhost」意義相同,皆代表本機伺服器)

mysql_select_db()函數的回傳值為一布林值,若選取資料庫成功則回傳true,若失敗則回傳fase,因此,我們可利用mysql_select_db()函數來測知資料庫是否存在,例如:
Ex08_01.php[code]<?
    $conn = mysql_connect("localhost ", "root", "12345a");
    if(@mysql_select_db("STUDENTS", $conn))
     {
      echo "資料庫存在";
     }
    else
     {
      echo "資料庫不存在";
     }
?>[/code]在上例中:if判斷式中怎有一個「@(小老鼠)」符號?因為筆者希望:當mysql_select_db()函數執行失敗時PHP不要印出如圖8-1中PHP回應的錯誤訊息,也就是這個「@(小老鼠)」符號會隱藏PHP回應的錯誤訊息!
[attach]5627[/attach]
圖8-1  系統回應的錯誤訊息。

小誌 發表於 2011-4-20 09:50

[color=RoyalBlue][size=3][b]查詢與取得資料的mysql_query()函數[/b][/size][/color]
當使用mysql_select_db()函數選取我們要使用的資料庫後,就可以開始利用「mysql_query()」函數來查詢並取得資料庫內某個資料表的資料記錄:
[color=Magenta]mysql_query() 函數[/color][code]int mysql_query ( string query [, int link_identifier])[/code]mysql_query()函數使用時需給定兩個參數:
[list=1]
[*]query:查詢字串,也就是要對資料庫下達的SQL命令字串,例如「Select」命令。
[*]link_identifier:連線代號,某個已建立並完成資料庫連結的「連線代號」,這個參數可以不指定,在mysql_query()函數執行時會自動找尋最近由mysql_connect()函數所建立的連線。
[/list]例如:
Ex08_02.php[code]<?
    $conn = mysql_connect("127.0.0.1", "root", "12345a");
    if(mysql_select_db("STUDENTS", $conn))
     {
      //資料庫存在,進行資料查詢
      $SQL="SELECT * FROM studentlist";
      mysql_query($SQL);
     }
    else
     {
      echo "資料庫不存在";
     }
?>[/code]由mysql_query()函數的格式您可以發現其回傳值為一個整數值,其實不然,例如我們所下達的SQL指令為「Select」(取得某個資料表內的資料記錄),如果順利取回資料,則回傳值其實是一張虛擬的「資料表」,反之,未順利取得資料此時回傳值才會是整數0。
當然,範例ex08_02是可以執行的,但卻未達到我們提取資料的目的,為什麼呢?因為我們沒有將mysql_query()函數執行後的回傳結果保留下來!所以我們應該將範例ex08_02更正如下:
Ex08_03.php[code]…
    if(@mysql_select_db("STUDENTS", $conn))
     {
      //資料庫存在,建立SQL命令字串
      $SQL="SELECT * FROM studentlist";
      //將回傳結果存放於變數中
      $datalist=mysql_query($SQL);
     }
    else
     …[/code][color=Red]何謂SQL[/color]
SQL是Structure Query Language的簡寫,翻譯為"結構化查詢語言"。SQL語言是使用一些淺顯易懂的口語化句子構成指令,來存取資料庫的內容。就因為它口語化的指令敘述,所以各大廠商的資料庫軟體就大多使用SQL語言,而微軟的「SQL Server」只是得到了「名稱」之便罷了,像Orcale、Interbase或我們現在使用的MySQL資料庫等,都是使用SQL語言的資料庫。

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供