在PHP函數庫中,有數十種專爲處理MySQL數據庫所開發的函數,詳細的說明可在這個位置:http://www.php.net/manual/en/ref.mysql.php查詢。在此對一些常用的函數進行簡要的說明。
1 連接與查詢
功能 |
建立數據庫連接 |
函數名稱 |
Mysql_connect() 或 mysql_pconnect() |
傳入參數 |
[string SERVER [, string USERNAME [, string PASSWORD [, bool NEW_LINK [, int CLIENT_FLAGS]]]]] |
返回參數 |
建立完成的數據庫連接 |
續表
功能 |
建立數據庫連接 |
範例 |
$link = mysql_connect('localhost', 'root', '123456'); |
說明 |
創建一MySQL服務器連接。若使用 mysql_pconnect() ,則可以創建一個持續性的連接(persistent connection)。 其中所有的參數都可以省略。 當不加任何參數時,SERVER 的默認值爲 localhost,USERNAME 的默認值爲 PHP 執行程序的擁有者,PASSWORD 則爲空字符串。而 SERVER 後方還可以加上冒號與端口號,代表使用哪個端口與 MySQL 連接,如果不特別指定,均使用默認端口3306。 |
功能 |
選用數據庫 |
函數名稱 |
mysql_select_db() |
傳入參數 |
string DATABASE_NAME [, resource LINK_IDENTIFIER] |
返回參數 |
|
範例 |
mysql_select_db('db'); |
說明 |
此函數用來選定欲訪問的數據庫。當 LINK_IDENTIFIER 參數被省略時,默認使用最近一次已建立的 connection;若沒有任何已建立的 connection 可供利用,則會自動執行未加參數的 mysql_connect(),試圖自行創建新的 connection。 另外,亦可使用mysql_query()函數達到相同效果,如:mysql_query('use db'); |
功能 |
新建數據庫 |
函數名稱 |
mysql_create_db () |
傳入參數 |
string DATABASE_NAME |
返回參數 |
|
範例 |
mysql_create_db('db'); |
說明 |
此函數可創建一新數據庫,數據庫名稱爲傳入參數。 |
功能 |
執行查詢 |
函數名稱 |
mysql_query() |
傳入參數 |
string QUERY [, resource LINK_IDENTIFIER [, int RESULT_MODE]] |
返回參數 |
續表
功能 |
執行查詢 |
範例 |
mysql_query('select * from zip'); |
說明 |
本函數用來提交任何標準的SQL查詢字符串給MySQL處理。若未指定 LINK_IDENTIFIER參數,則會使用最近一次已建立的connection。 而當所執行的是 SELECT、SHOW、EXPLAIN 或 DESCRIBE 語句時,將返回一個 resource identifier,執行失敗時返回FALSE。執行其他SQL語句時,成功返回TRUE,否則返回FALSE。 |
功能 |
釋放存儲器 |
函數名稱 |
mysql_free_result () |
傳入參數 |
resource RESULT |
返回參數 |
|
範例 |
mysql_free_result($result); |
說明 |
釋放 $RESULT 所佔用的存儲器 |
功能 |
關閉連接 |
函數名稱 |
Mysql_close () |
傳入參數 |
[resource LINK_IDENTIFIER] |
返回參數 |
|
範例 |
Mysql_close ($link); |
說明 |
關閉由mysql_connect()所創建的MySQL服務器連接。 一般而言,當程序結束之後,由 mysql_connect()所建立的連接會自動中斷,這個函數是用不着的。但是將數據取出之後,程序還要對它們進行耗時又複雜的運算處理。建議先退出數據庫的連接,以減輕MySQL的負擔。 |
2 分析、計算與統計
功能 |
計算返回結果中的數據條數 |
函數名稱 |
mysql_num_rows |
傳入參數 |
Resource RESULT |
返回參數 |
數據條數 |
範例 |
mysql_num_rows ($result); |
功能 |
移動數據記錄指針 |
函數名稱 |
mysql_data_seek () |
傳入參數 |
esource RESULT_IDENTIFIER, int ROW_NUMBER |
返回參數 |
|
範例 |
mysql_data_seek($result, 6); |
說明 |
將RESULT_IDENTIFIER的數據記錄指針移到第 ROW_NUMBER個 row 去。以範例而言,便是將數據記錄指針移動到第六行。 |
功能 |
分析返回內容,並提取單條數據 |
函數名稱 |
mysql_fetch_row () |
傳入參數 |
resource 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 ...... } |
說明 |
搭配循環的使用,這個函數可以從RESULT中將數據以一維數組的方式分行提取出來。 |
功能 |
分析數組內容 |
函數名稱 |
mysql_fetch_array () |
傳入參數 |
resource result [, int result_type] |
返回參數 |
|
範例 |
用法一:(使用字段編號分析) while ($row = mysql_fetch_array($result, MYSQL_NUM)) { printf("ID: %s Name: %s", $row[0], $row[1]); } 用法二:(使用字段名稱分析) while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { printf("ID: %s Name: %s", $row["id"], $row["name"]); } 用法三:(同時使用字段編號與名稱分析) while ($row = mysql_fetch_array($result, MYSQL_BOTH)) { printf ("ID: %s Name: %s", $row[0], $row["name"]); } |
說明 |
分析每一行$row中的各個字段內容。 可使用三種分析方式,分別爲: MYSQL_NUM:使用字段編號分析 MYSQL_ASSOC:使用字段名稱分析 MYSQL_BOTH:同時使用字段編號與名稱分析 |
功能 |
分析對象內容 |
函數名稱 |
Mysql_fetch_object () |
傳入參數 |
resource result [, int result_type] |
返回參數 |
|
範例 |
$result = mysql_query("select * from mytable"); while ($row = mysql_fetch_object($result)) { echo $row->user_id; echo $row->fullname; } |
說明 |
mysql_fetch_object ()類似於mysql_fetch_array () 唯一不同之處在於mysql_fetch_object ()僅能使用字段名稱進行分析,不能使用字段編號或使用同時使用字段編號與名稱進行分析。 |
功能 |
分析表頭內容 |
函數名稱 |
mysql_fetch_field () |
傳入參數 |
resource result [, int fieldnum] |
返回參數 |
|
範例 |
while ($i < mysql_num_fields($result)) { echo "Information for column $i:<br />/n"; $row = mysql_fetch_field($result, $i); if (!$row) { echo "No information available<br />/n"; } echo "<pre> blob: $row->blob max_length: $row->max_length multiple_key: $row->multiple_key name: $row->name not_null: $row->not_null numeric: $row->numeric primary_key: $row->primary_key table: $row->table type: $row->type unique_key: $row->unique_key unsigned: $row->unsigned zerofill: $row->zerofill </pre>"; $i++; } |
說明 |
分析表頭字段信息,信息類型共有12種,包括名稱、長度、類型等,說明如下: name – 字段名稱 table – 這個字段所屬表格名稱 max_length - 這個字段最大長度 not_null - 如果是1則表示此字段不可爲 NULL primary_key - 如果是1則表示此字段爲 primary key unique_key - 如果是1則表示此字段爲 unique key multiple_key - 如果是1則表示此字段爲 non-unique key numeric - 如果是1則表示此字段爲數字類型 blob - 如果是1則表示此字段爲 BLOB 類型 type - 這個字段的類型 unsigned -如果是1則表示此字段爲unsigned 類型 zerofill -如果是1則表示此字段爲zero-filled |
功能 |
檢測自動生成的值 |
函數名稱 |
Mysql_insert_id () |
傳入參數 |
[resource LINK_IDENTIFIER] |
返回參數 |
|
範例 |
$ID = mysql_insert_id($link); |
說明 |
假如您將某個字段的類型設爲AUTO_INCREMENT,使用本函數將可以得知在 INSERT 語句被執行時,MySQL 自動爲該字段創建的值爲何。 |
功能 |
檢測所影響的數組數量 |
函數名稱 |
mysql_affected_rows () |
傳入參數 |
[resource LINK_IDENTIFIER] |
返回參數 |
|
範例 |
$num_rows = mysql_affected_rows($link); |
說明 |
取得最近一次通過LINK_IDENTIFIER,在 MySQL上執行INSERT、UPDATE或DELETE 所影響的行(row)數。若執行的是不含WHERE的DELETE語句,則會刪除全部數據,但本函數的返回值將是0。 由於執行UPDATE時,新值與舊值相同的數據列不會被更新,所以 mysql_affected_rows( )函數的返回值,不一定就是查詢條件所符合的數據條數。 |
3 顯示系統信息
功能 |
列出系統內所有數據庫名稱 |
函數名稱 |
mysql_list_dbs () |
傳入參數 |
$link |
返回參數 |
|
範例 |
$db_list = mysql_list_dbs($link); while ($row = mysql_fetch_object($db_list)) { echo $row->Database . "/n"; } |
說明 |
顯示系統內所有的數據庫名稱 |
功能 |
列出某一數據庫內所有數據表名稱 |
函數名稱 |
Mysql_list_tables () |
傳入參數 |
$dbname |
返回參數 |
|
範例 |
$result = mysql_list_tables($dbname); |
while ($row = mysql_fetch_row($result)) { echo "Table: $row[0]/n"; } |
|
說明 |
列出某一數據庫內所有數據表數據 |
功能 |
列出某數據表內所有字段名稱 |
函數名稱 |
Mysql_list_fields () |
傳入參數 |
$dbname,$tablename,$link |
返回參數 |
|
範例 |
$fields = mysql_list_fields("database1", "table1", $link); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { echo mysql_field_name($fields, $i) . "/n"; } |
說明 |
列出某數據表內所有數據字段名稱。 在瞭解如何用PHP連接MySQL,執行SQL指令並使用返回的數據,同時也對PHP所提供的MySQL函數有進一步的瞭解之後,接下來便是通過範例來增強使用上的熟悉程度,請見下一節:PHP與MySQL操作範例。 |