最近IBM推出了一個令人十分震驚的數據產品DB2 Express C。這個產品的性能和其他的DB2版本差不多,而更吸引眼球的是它竟然是完全免費的。這對於以MySQL為首的開源數據庫是一個不小的沖擊,恐怕以後LAMP(Linux+Apache+MySQL+PHP)要變成LADP(Linux+Apache+DB2+PHP)了。為了提前應對這個變化,讓我們先來看一看PHP操作DB2 Express C的各種方法。
PHP在它發展的13年的時間演化出了非常多的數據庫接口。本文就以Windows+PHP5.2為例來討論在PHP中常用的五種操作DB2 Express C的方式。
在討論之前,讓我們先使用下面的DB2 SQL語句建立一個表,在本文中將會經常使用這個表。
create table mytablea
...{
id int primary key,
name varchar(20) not null,
age int not null,
phone varchar(30) not null,
salary int
}
一、ODBC方式
DB2 Express C和其他的數據庫(SQL Server、Oracle)一樣,也提供了ODBC驅動。但DB2的ODBC驅動並未隨安裝程序打包,在使用時需要從IBM的網站下載。網址如下:http://www.ibm.com/developerworks/cn/db2/v9/index_download.html。
PHP從3.0.6開始引入了訪問ODBC API的函數。所有的訪問ODBC API的函數都以odbc_開頭。在使用這些函數之前,必須在本機上建立一個用戶或系統的DB2 ODBC數據源。如圖1所示。本文所建立的數據源名是mydb2。
圖1首先使用odbc_connect函數連接mydb2數據源。odbc_connect函數的定義如下:
odbc_connect ( "數據源名", "用戶名", "密碼","游標類型"[可選])
下面是連接mydb2的語句。
$conn = odbc_connect("mydb2", "db2admin", "mypassword",SQL_CUR_USE_ODBC );
其中db2admin是DB2 Express C在安裝時默認的用戶名。
PHP還為我們提供了另外一個帶緩沖的連接數據庫的方法。odbc_pconnect。這個方法和odbc_connect的差不多,只是在當前php文件執行完後,這個連接並不釋放。如果下一次仍然使用mydb2數據源的話,將繼續使用這個連接。這樣可以提高Web程序的執行效率。
一般對數據庫的操作無外乎兩種,一是執行如delete、update和insert等不返回結果的SQL,另外一種是執行返回結果的SQL語句,如select。
第一種情況可以使用odbc_do來執行。
odbc_do($conn, "delete * from mytable where id > 1000");
odbc_do($conn, "insert into mytable values(2000, 'mike', 30, '12345678', 3000)");
第二種情況可以使用odbc_exec來執行。
$result = odbc_exec($conn, "select * from mytable where id = 2000");
如果odbc_exec執行成功,則返回查詢的結果。
輸出$result的方法很多,在這裡我只給出將結果轉換成數組的方法,其他的方法請參閱PHP手冊。
var $fetch=array();
fetch=odbc_fetch_array($result, 2); // 將第2行的每個字段的值保存在數組fetch中
$field1 = odbc_result($Query_ID, 1);
$field2 = odbc_result($Query_ID, "salary");
print $field1 . "," . $field2;
其中odbc_result既可以根據字段的索引,又可以根據字段的名得到字段值。
最後使用odbc_close關閉數據庫連接。
1