天天看點

Php達夢資料庫文法,PHP 操作達夢資料庫測試

在 http://www.dameng.com 下載下傳 DM6.0 開發版 for Windows:

除不支援資料庫叢集等企業級功能,開發版提供了完整的功能,支援GB級資料量,支援多使用者并發通路能力,滿足各種中、小型應用的需要。

開發版免費供開發者用于學習、測試、開發用途,不允許用于生産、經營等商業用途或其他用途。

雖然說明裡說 for Windows2000,但在 Windows Server 2003 下,輕按兩下 setup.exe,順利安裝。

安裝完成後在 D:/dmdbms/bin 目錄下有 php4_dm.dll 和 php5_dm.dll 2個檔案,分别用于提供達夢資料庫與 PHP4.0 和 PHP5.0 的擴充接口。

但是,本人的 Apache2.2.8 + PHP5.2.5 環境下,在 php.ini 檔案中配置 php5_dm.dll 擴充後,Apache 無法啟動。隻好在 IIS6.0 + PHP4.4.7 下安裝 php4_dm.dll 進行測試。

在 php.ini 檔案中另需添加 DM 的配置:

[dm]

dm.allow_persistent = 1

dm.max_persistent = -1

dm.max_links = -1

dm.default_host = localhost

dm.default_db = SYSTEM

dm.default_user = SYSDBA

dm.default_pw = SYSDBA

dm.connect_timeout = 10

dm.defaultlrl = 4096

dm.defaultbinmode = 1

dm.check_persistent = ON

dm.port = 12345

安裝時選擇了一同安裝測試資料,是以有一個使用者資料庫 BOOKSHOP。在該資料庫裡,建立了一個“模式”MYTEST,再在該模式下建立表 TEABL1。導出SQL腳本參考一下表結構:

CREATE TABLE "TABLE1" AT "BOOKSHOP"

(

"NID" INTEGER IDENTITY(1, 1),

"SNAME" VARCHAR(50),

"NAGE" SMALLINT DEFAULT 0,

"BGENDER" BOOLEAN,

"DDATETIME" TIMESTAMP(0),

PRIMARY KEY("NID")) STORAGE( INITIAL 1 , NEXT 1 , MINEXTENTS 1 , on "PRIMARY", FILLFACTOR 0 )

測試代碼與 MYSQL 代碼形式非常相似。功能是插入一條記錄,再選擇全部的記錄,并顯示出來:

$dbhost = 'localhost';

$dbuser = 'SYSDBA';

$dbpass = 'ABCDE54321';

$dbname = 'BOOKSHOP';

$connect = dm_connect($dbhost, $dbuser, $dbpass);

if($connect)

{

echo '成功連接配接到達夢資料庫系統';

}

else

{

echo '連接配接達夢資料庫系統失敗';

echo dm_error();

exit;

}

dm_select_db($dbname) or die("select DB error.");

$sql = "INSERT INTO MYTEST.TABLE1 (SNAME, NAGE, BGENDER) VALUES ('姓名', 80, true)";

dm_query($sql);

if (dm_affected_rows()>0)

echo "Insert OK.";

else

echo "Insert failed.";

$sql = "select * from MYTEST.TABLE1";

$result = dm_query($sql);

echo "

";

while($row=dm_fetch_assoc($result))

{

echo $row["NID"] . "   " . $row["SNAME"] . "   " . $row["NAGE"]. "   " . $row["BGENDER"] . "

";

}

dm_free_result($result);

dm_close($connect);

在 Windows 下,達夢資料庫管理界面操作還是很順手,比第一次接觸 Oracle 時上手要快。與 MySQL 相比,多了個“模式(SCHEMA)”的概念,但很快了解其意義後,把它了解為表的字首,則完全不影響編碼使用。

達夢資料庫用戶端管理程式的GUI操作界面好像功能還不算強大,有些細節的、貼心的操作不支援,比如不能在2個資料庫之間拖動複制/移動表。

對于PHP程式員來說,操作達夢資料庫和操作MySQL資料庫非常相似,操作函數差不多是把“mysql”換成了“dm” ,其它基本沒有變動。PHP程式員可以很快上手針對達夢資料庫程式設計。

就是不知道通過PHP語言能不能對達夢的事務、鎖、存儲過程等進階特性進行操作。希望針對程式員的技術文檔再詳細一些。沒有程式員的支援,資料庫功能再強大也沒人知曉。

附錄:

DM 提供的 PHP 擴充函數,簡要說明每個函數的功能:

dm_connect: 打開一個到 DM 伺服器的連接配接

dm_pconnect: 打開一個到 DM 伺服器的持久連接配接

dm_close: 關閉 DM 連接配接

dm_set_connect: 設定連接配接

dm_error: 傳回上一個 DM 操作産生的文本錯誤資訊

dm_errno: 傳回上一個 DM 操作中的錯誤資訊的數字編碼

dm_query: 發送一條 DM 查詢

dm_unbuffered_query: 向 DM 發送一條 SQL 查詢,并不擷取和緩存結果的行

dm_more_query_no_result:

dm_db_query: 發送一條 DM 查詢

dm_affected_rows: 取得前一次 DM 操作所影響的記錄行數

dm_create_db: 建立一個 DM 資料庫

dm_drop_db: 丢棄(删除)一個 DM 資料庫

dm_escape_string: 轉義一個字元串用于dm_query

dm_fetch_array: 從結果集中取得一行作為關聯數組,或數字數組,或二者兼有

dm_fetch_assoc: 從結果集中取得一行作為關聯數組

dm_fetch_field: 從結果集中取得列資訊并作為對象傳回

dm_num_fields: 取得結果集中字段的數目

dm_fetch_lengths: 取得結果集中每個輸出的長度

dm_fetch_object: 從結果集中取得一行作為對象

dm_fetch_row: 從結果集中取得一行作為枚舉數組

dm_field_flags: 從結果中取得和指定字段關聯的标志

dm_field_len: 傳回指定字段的長度

dm_field_name: 取得結果中指定字段的字段名

dm_field_seek: 将結果集中的指針設定為制定的字段偏移量

dm_field_table: 取得指定字段所在的表名

dm_field_type: 取得結果集中指定字段的類型

dm_free_result: 釋放結果記憶體

dm_get_server_info: 取得 DM 伺服器資訊

dm_list_dbs: 列出 DM 伺服器中所有的資料庫

dm_list_fields: 列出 DM 結果中的字段

dm_list_tables: 列出 DM 資料庫中的表

dm_num_rows: 取得結果集中行的數目

dm_ping: Ping 一個伺服器連接配接,如果沒有連接配接則重新連接配接

dm_result: 取得結果資料

dm_insert_id: 取得上一步 INSERT 操作産生的 ID

dm_insert_id_ex: 取得上一步 INSERT 操作産生的 ID

dm_select_db: 選擇 DM 資料庫

dm_tablename: 取得表名

dm_data_seek: 移動内部結果的指針

dm_db_name: 取得結果資料