標題:
8-1-1 讀取資料集
[打印本頁]
作者:
小誌
時間:
2011-4-20 09:53
標題:
8-1-1 讀取資料集
8-1-1 讀取資料集
要讀取mysql_query()函數所取得的資料,就必須先了解資料表的結構,如果我們將資料表作大部的分解,則可區分為欄位抬頭與資料表內容(欄位資料)兩大部分:
[attach]5634[/attach]
圖8-2 大部分解資料表。
「欄位抬頭」是由數個「欄位名稱」所組合而成,如下圖的欄位抬頭就是由「姓名」、「出生年月日」、「身分證字號」、「住址」、「家長」、「電話」、「科別」等欄位名稱所組合而成:
[attach]5629[/attach]
圖8-3 「欄位抬頭」的結構。
作者:
小誌
時間:
2011-4-20 09:54
而「資料表內容」則是由多筆「資料錄(Record)」所集合而成;而每一筆的資料錄又是由多個「欄位(Field)」所組成:
[attach]5635[/attach]
圖8-4 「資料表內容」的結構。
所以,我們可以把資料庫的結構分析如圖8-5,以文字來解釋就是:「資料欄位組成資料錄,資料錄組成資料表,資料表組成資料庫」。
[attach]5631[/attach]
圖8-5 資料庫檔案結構分析。
作者:
小誌
時間:
2011-4-20 09:56
Field物件
資料庫中最小的資料單位為『欄位』,也就是Field物件,Filed物件擁有三個屬性,分別為『Name』(欄位名稱)、『Value』(欄位資料值)、『Type』(欄位資料型態,例如:數字、文字、日期....等等)等三種:
[attach]5633[/attach]
圖8-6 欄位(Field)結構。
要得知資料表中共有多少個欄位可使用「mysql_num_fields()」函數:
mysql_num_fields() 函數
int mysql_num_fields ( int result)
複製代碼
當我們知道資料表中共有多少個欄位就可利用「mysql_field_name()」函數列舉各個欄位的抬頭:
mysql_field_name() 函數
int mysql_field_name ( int result [, int offset])
複製代碼
如果我們要將全部欄位名稱列舉出來,可利用下列這段程式碼:
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);
//取得欄位數量
$fieldnum=mysql_num_fields($datalist);
//列出欄位抬頭
for ($x=0 ;$x<$fieldnum;$x++)
{
echo mysql_field_name($datalist,$x) . "<br>";
}
複製代碼
使用「mysql_field_type()」函數則可列舉出每個欄位的儲存資料型態:
mysql_field_type() 函數
string mysql_field_type ( int result [, int offset])
複製代碼
如果我們要將全部欄位的儲存資料型態列舉出來,可利用下列這段程式碼:
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);
//取得欄位數量
$fieldnum=mysql_num_fields($datalist);
//列出欄位資料型態
for ($x=0 ;$x<$fieldnum;$x++)
{
echo mysql_field_type($datalist,$x) . "<br>";
}
複製代碼
作者:
小誌
時間:
2011-4-20 10:04
Fields 集合物件
Field物件的集合就是Fields集合物件,對比於資料庫的組織結構來看,欄位的集合就構成『資料錄』,每一筆的資料錄(Fields集合物件)是由多個「欄位(Field)」所組成,也就說資料錄是採用「陣列」的方式集合多個欄位而成;換言之:「資料錄就是欄位陣列」。
[attach]5636[/attach]
圖8-7 欄位陣列。
所以我們可以利用「mysql_fetch_array()」函數取得一筆資料錄:
mysql_fetch_array() 函數
array mysql_fetch_array ( int result_identifier ,int [result_type])
複製代碼
result_identifier是必要參數,而result_type則是非必要參數,result_type有下列三種可能值:
MYSQL_NUM:回傳的資料陣列只包含數字索引。
MYSQL_ASSOC:回傳的資料陣列只包含文字(欄位名稱)索引。
MYSQL_BOTH:回傳的資料陣列包含數字、文字(欄位名稱)索引兩者,此為預設值。
取得一筆資料錄後,即可利用陣列特性取得取得特定欄位的欄位資料,如下列程式敘述:(範例ex08_05.php)
//資料庫存在,建立SQL命令字串
$SQL="SELECT * FROM stuentlist";
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);
//將資料錄轉換為欄位陣列集合
$fielddatas=mysql_fetch_array($datalist);
//取出註標編號為0的欄位資料
echo $fielddatas[0] . "<br>";
//取出班級座號欄位的資料
echo $fielddatas["班級座號"];
複製代碼
利用「mysql_featch_array()」函數取得一筆資料錄,我們可以數字的元素陣列註標編號(欄位編號)或元素陣列字串註標(欄位抬頭)取得特定欄位內的資料。
作者:
小誌
時間:
2011-4-20 10:06
注意:
假若資料表中的欄位名稱以中文命名(繁體中文),則利用「mysql_featch_array()」函數取得一筆資料錄後,若以元素陣列字串註標(欄位抬頭)取得特定欄位內的資料時,例如範例ex08_05.php將會發生如圖8-8的「Undefined index」錯誤,此錯誤的發生在於提取資料的校對字元表沒有正確的對應:
[attach]5637[/attach]
圖8-8 提取欄位資料發生錯誤。
為了解決「Undefined index」錯誤的問題,可在使用mysql_query()函數執行SQL命令(SELECT命令)之前,先利用mysql_query()函數指定提取資料的校對字元表:
mysql_query("set character set big5");
因此,範例ex08_05.php應修正如下:
ex08_05a.php
<?
$conn = mysql_connect("127.0.0.1", "root", "12345a");
if(@mysql_select_db("STUDENTS", $conn))
{
//資料庫存在,建立SQL命令字串
$SQL="SELECT * FROM studentlist";
//指定提取資料的校對字元表
//mysql_query("set character set big5");
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);
//將資料錄轉換為欄位陣列集合
$fielddatas=mysql_fetch_array($datalist, MYSQL_BOTH);
//取出註標編號為0的欄位資料
echo $fielddatas[0] . "<br>";
//取出班級座號欄位的資料
echo $fielddatas["班級座號"];
}
else
{
echo "資料庫不存在";
}
?>
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)