初探欄位型態運算元與函數存取 MySQLPHP 的 MySQL Functions進階
MySQL 簡介

PHP 的 MySQL Functions

 在 PHP 裡頭有一組函數,專門被用來存取 MySQL database server;只要您在編譯 PHP 時加入對 MySQL 的支持,就能夠使用它。由於其中包括 50 個左右的函數,限於篇幅,在此僅就較常用的部份加以說明,其餘的函數請自行參閱相關書籍或線上文件。

 以下幾個函數可以用來建立 PHP 與 MySQL 之間的連線,並將 SQL 敘述遞交給 MySQL 執行。

mysql_connectmysql_pconnect
語法:resource mysql_connect ( [string SERVER [, string USERNAME [, string PASSWORD [, bool NEW_LINK [, int CLIENT_FLAGS]]]]])
說明:
  1. 建立 MySQL 伺服器連線。若使用 mysql_pconnect( ) 的話,則可以建立一個持續性的連線(persistent connection)。
  2. 其中所有的參數都可以省略。當不加任何參數時,SERVER 的內定值為 localhost、USERNAME 的內定值為 PHP 執行程序的擁有者、PASSWORD 則為空字串。而 SERVER 後方還可以加上冒號與埠號,代表使用哪個埠與 MySQL 連接。
用法:$link = mysql_connect("localhost", "chensh", "123456");

mysql_select_db
語法:bool mysql_select_db ( string DATABASE_NAME [, resource LINK_IDENTIFIER])
說明:
  1. 本函數用來選定欲存取的資料庫。
  2. 當 LINK_IDENTIFIER 參數被省略時,預設使用最近一次已建立的 connection;若沒有任何已建立的 connection 可供利用,則會自動執行未加參數的 mysql_connect(),試圖自行建立新的 connection。
用法:mysql_select_db("MyDB", $link);

mysql_query
語法:resource mysql_query ( string QUERY [, resource LINK_IDENTIFIER [, int RESULT_MODE]])
說明:
  1. 本函數用來送出 QUERY 字串給 MySQL 處理。
  2. 若未指定 LINK_IDENTIFIER 參數,則會使用最近一次已建立的 connection。
  3. 當所執行的是 SELECT、SHOW、EXPLAIN 或 DESCRIBE 敘述時,將傳回一個 resource identifier,執行失敗時傳回 FALSE。
  4. 執行其它 SQL 敘述時,成功傳回 TRUE,否則傳回 FALSE。
用法:$result = mysql_query("SELECT * WHERE friend", $link);

mysql_db_query
語法:resource mysql_db_query ( string DATABASE, string QUERY [, resource LINK_IDENTIFIER])
說明:本函數的使用方法與執行結果與 mysql_query( ) 相似,只是多了一個 DATABASE 參數,用來指定欲存取的資料庫。您可以將本函數視為 mysql_select_db( ) 與 mysql_query( ) 的組合。
用法:$result = mysql_db_query("MyDB", "SELECT * WHERE friend", $link);


 當所執行的是 SELECT、SHOW、EXPLAIN 或 DESCRIBE 敘述時,將傳回一個 resource identifier,您可以使用下列的函數來處理它。

mysql_num_rows
語法:int mysql_num_rows ( resource RESULT)
說明:用來計算 RESULT 裡頭有多少個資料列。
用法:$num_rows = mysql_num_rows($result);

mysql_fetch_row
語法:array mysql_fetch_row ( resource RESULT)
說明:搭配迴圈的使用,本函數可以從 RESULT 裡,將資料一列一列讀取出來。
用法一:
    $num_rows = mysql_num_rows($result);
    for ( $i=0; $i<$num_rows; $i++ ) {
        list($value1, $value2) = mysql_fetch_row($result);
        echo $value1;
        echo $value2;
        echo ......
    }
用法二:
    while ( list($value1, $value2) = mysql_fetch_row($result) ) {
        echo $value1;
        echo $value2;
        echo ......
    }
用法三:
    while ( $value = mysql_fetch_row($result) ) {
        echo $value[0];
        echo $value[1];
        echo ......
    }

mysql_data_seek
語法:bool mysql_data_seek ( resource RESULT_IDENTIFIER, int ROW_NUMBER)
說明:將 RESULT_IDENTIFIER 的內部指標移到第 ROW_NUMBER 個 row 去。
用法:mysql_data_seek($result, 6);

mysql_insert_id
語法:int mysql_insert_id ( [resource LINK_IDENTIFIER])
說明:假如您將某個欄位的型態設為「AUTO_INCREMENT」的話,使用本函數將可以得知在 INSERT 敘述被執行時,MySQL 自動為該欄位產生的值為何。
用法:$ID = mysql_insert_id($link);

mysql_free_result
語法:bool mysql_free_result ( resource RESULT)
說明:釋放 RESULT 所佔用的記憶體。
用法:mysql_free_result($result);


 若您所執行的是 INSERT、UPDATE 或 DELETE 敘述時,下列函數是可以拿來搭配使用的。

mysql_affected_rows
語法:int mysql_affected_rows ( [resource LINK_IDENTIFIER])
說明:
  1. 取得最近一次藉由 LINK_IDENTIFIER,在 MySQL 上執行 INSERT、UPDATE 或 DELETE 所影響的列(row)數目。
  2. 若執行是的不含 WHERE 的 DELETE 敘述,則會刪除全部資料,但本函數的傳回值將是 0。
  3. 由於執行 UPDATE 時,新值與舊值相同的資料列不會被更新,所以 mysql_affected_rows( ) 函數的傳回值,不一定就是查詢條件所符合的資料筆數。
用法:$num_rows = mysql_affected_rows($link);


 下列函數在一些特殊情況下可能會派上用場。

mysql_close
語法:bool mysql_close ( [resource LINK_IDENTIFIER])
說明:
  1. 關閉由 mysql_connect( ) 所建立的 MySQL 伺服器連線。
  2. 一般而言,當程式結束之後,由 mysql_connect( ) 所建立連線會自動中斷,這個函數是用不著的。但是當您將資料取出之後,程式還要對它們進行耗時又複雜的運算處理時,建議您先結束資料庫的連線,以減輕 MySQL 的負擔。
用法:mysql_close($link);

mysql_error
語法:string mysql_error ( [resource LINK_IDENTIFIER])
說明:本函數用來取得 MySQL 在執行 SQL 敘述時的錯誤訊息。當您在為程式除錯時,可能會用得上它。
用法:$Error = mysql_error($link);

初探欄位型態運算元與函數存取 MySQLPHP 的 MySQL Functions進階