Board logo

標題: [教學] 第8章 PHP與資料庫存取(8-1 查詢與取得資料) [打印本頁]

作者: 小誌    時間: 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

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

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

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

查詢與取得資料的mysql_query()函數
當使用mysql_select_db()函數選取我們要使用的資料庫後,就可以開始利用「mysql_query()」函數來查詢並取得資料庫內某個資料表的資料記錄:
mysql_query() 函數
  1. int mysql_query ( string query [, int link_identifier])
複製代碼
mysql_query()函數使用時需給定兩個參數:
例如:
Ex08_02.php
  1. <?
  2.     $conn = mysql_connect("127.0.0.1", "root", "12345a");
  3.     if(mysql_select_db("STUDENTS", $conn))
  4.      {
  5.       //資料庫存在,進行資料查詢
  6.       $SQL="SELECT * FROM studentlist";
  7.       mysql_query($SQL);
  8.      }
  9.     else
  10.      {
  11.       echo "資料庫不存在";
  12.      }
  13. ?>
複製代碼
由mysql_query()函數的格式您可以發現其回傳值為一個整數值,其實不然,例如我們所下達的SQL指令為「Select」(取得某個資料表內的資料記錄),如果順利取回資料,則回傳值其實是一張虛擬的「資料表」,反之,未順利取得資料此時回傳值才會是整數0。
當然,範例ex08_02是可以執行的,但卻未達到我們提取資料的目的,為什麼呢?因為我們沒有將mysql_query()函數執行後的回傳結果保留下來!所以我們應該將範例ex08_02更正如下:
Ex08_03.php

  1.     if(@mysql_select_db("STUDENTS", $conn))
  2.      {
  3.       //資料庫存在,建立SQL命令字串
  4.       $SQL="SELECT * FROM studentlist";
  5.       //將回傳結果存放於變數中
  6.       $datalist=mysql_query($SQL);
  7.      }
  8.     else
  9.      …
複製代碼
何謂SQL
SQL是Structure Query Language的簡寫,翻譯為"結構化查詢語言"。SQL語言是使用一些淺顯易懂的口語化句子構成指令,來存取資料庫的內容。就因為它口語化的指令敘述,所以各大廠商的資料庫軟體就大多使用SQL語言,而微軟的「SQL Server」只是得到了「名稱」之便罷了,像Orcale、Interbase或我們現在使用的MySQL資料庫等,都是使用SQL語言的資料庫。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)