MySQL是一個小巧靈瓏的資料庫伺服器軟體,對於中、小型應用系統是非常理想的。除了支援標準的ANSI SQL語句外,最重要的是,它還支援多種平台,而在Unix/Linux系統上,MySQL支援多線程運行方式,從而能獲得相當好的效能。它和PHP、Apache一樣,是屬於開放原始碼軟體。其官方網站是:http://www.mysql.com,上面提供Windows,Linux,Unix版本的原始碼的下載。
注意,MySQL訪問函數都需要有相應的許可權才能運行。常用的相關函數介紹如下:
(1)integer mysql_connect(主機,使用者名稱,口令);
此函數開始一個對指定主機上的MySQL資料庫的串連。若該資料庫位於一個不同地連接埠,則在主機名稱後加上冒號和連接埠號碼。所有參數均為可選的,預設情況下分別對應為本地主機、使用者正在執行的指令碼名和空。主機可以是IP地址或網域名稱。
在指令碼執行結束時,串連被自動關閉,也可以用mysql_close提前關閉。
(2)boolean mysql_create_db(資料庫名);
建立一個資料庫。注意必須用一個帶有建立資料庫許可權的帳號開啟串連。
(3)boolean mysql_select_db(資料庫名,串連號);
選擇預設資料庫。
(4)integer mysql_query(SQL語句,串連號);
對指定資料庫進行查詢。如果SQL語句是select,則返回一個結果號,否則返回的值可以不理會。如果失敗,返回false.。
(5)array mysql_fetch_array(結果號);
取出下一行,返回一個數組.可以用數字下標訪問(第一個欄位是下標 0),也可以用字串下標訪問(即使用各欄位名)。如已取了最後一行,返回 false.。
(6)mysql_fetch_row(結果號);
返回一個矩陣代表結果集中一行的所有域。每次調用都會產生下一行,直到沒有行剩下時返回false。每個域值都由一個從零開始的位移量索引。這是從查詢中擷取結果的最快方法。
(7)integer mysql_num_rows(結果號);
返回結果集中行的數目
(8)integer mysql_num_fields(結果號);
返回結果集中域的數目。
(9)integer mysql_list_dbs();
向伺服器查詢資料庫列表。它返回一個結果指標,該指標可用於mysql_fetch_row函數及類似函數。
(10)mysql_list_tables(資料庫名);
擷取一個指向指定資料庫的表單列表的結果指標。該結果指標可用於任何從結果集中擷取行的函數。
(11)mysql_close(串連號);
關閉對資料庫的串連。串連必須是由mysql_connect開啟的。該函數的使用不是嚴格必需的,因為在指令碼結束時,所有非永久鏈路都會被自動關閉。
(12)mysql_pconnect(主機,使用者名稱,口令);
與mysql_connect完全相似,但建立一個"永久串連",該串連一經建立永不關閉,即使使用mysql_close函數或程式執行完畢也不關閉.下一次試圖建立永久串連時,系統如發現已存在一個永久串連,則直接返回該串連號而不重新建立。
下面是一個調用MYSQL資料庫並分頁顯示的例子。
<?
$pagesize = 5; //每頁顯示5條記錄
$host="localhost";
$user="user";
$password="psw";
$dbname="book"; //所查詢的庫表名;
//串連MySQL資料庫
mysql_connect("$host","$user","$password") or die("無法串連MySQL資料庫伺服器!");
$db = mysql_select_db("$dbname") or die("無法串連資料庫!");
$sql = "select count(*) as total from pagetest";//產生查詢記錄數的SQL語句
$rst = mysql_query($sql) or die("無法執行SQL語句:$sql !"); //查詢記錄數
$row = mysql_fetch_array($rst) or die("沒有更多的記錄!"); /取出一條記錄
$rowcount = $row["total"];//取出記錄數
mysql_free_result($rst) or die("無法釋放result資源!"); //釋放result資源
$pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出總共有幾頁
if(!isset($pageno)) {
$pageno = 1; //在沒有設定pageno時,預設為顯示第1頁
}
if($pageno<1) {
$pageno = 1; //若pageno比1小,則把它設定為1
}
if($pageno>$pagecount) {
$pageno = $pagecount; //若pageno比總共的頁數大,則把它設定為最後一頁
}
if($pageno>0) {
$href = eregi_replace("%2f","/",urlencode($PHP_SELF));//把$PHP_SELF轉換為可以在URL上使用的字串,這樣的話就可以處理中文目錄或中文檔案名稱
if($pageno>1){//顯示上一頁的褳接
echo "<a href="" . $href . "?pageno=" . ($pageno-1) . "">上一頁</a> ";
}
else{
echo "上一頁";
}
for($i=1;$i<$pageno;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
echo $pageno . " ";
for($i++;$i<=$pagecount;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
if($pageno<$pagecount){//顯示下一頁的褳接
echo "<a href="" . $href . "?pageno=" . ($pageno+1) . "">下一頁</a> ";
}
else{
echo "下一頁 ";
}
$offset = ($pageno-1) * $pagesize;//算出本頁第一條記錄在整個表中的位置(第一條記錄為0)
$sql = "select * from pagetest LIMIT $offset,$pagesize";//產生查詢本頁資料的SQL語句
$rst = mysql_query($sql);//查詢本頁資料
$num_fields = mysql_num_fields($rst);//取得欄位總數
$i = 0;
while($i<$num_fields){//取得所有欄位的名字
$fields[$i] = mysql_field_name($rst,$i);//取得第i+1個欄位的名字
$i++;
}
echo "<table border="1" cellspacing="0" cellpadding="0">";//開始輸出表格
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//顯示欄位名稱
echo "<th>$field_name</th>";
}
echo "</tr>";
while($row=mysql_fetch_array($rst)){//顯示本頁資料
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//顯示每個欄位的值
$field_value = $row[$field_name];
if($field_value==""){
echo "<td> </td>";
}
else{
echo "<td>$field_value</td>";
}
}
echo "</tr>";
}
echo "</table>";//表格輸出結束
mysql_free_result($rst) or die("無法釋放result資源!");//釋放result資源
}
else{
echo "目前該表中沒有任何資料!";
}
mysql_close($server) or die("無法與伺服器中斷連線!");//中斷連線並釋放資源
?>