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 代码形式非常相似。功能是插入一条记录,再选择全部的记录,并显示出来:

<?php
$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 "<br>";
while($row=dm_fetch_assoc($result))
{
echo $row["NID"] . "&nbsp;&nbsp;&nbsp;" . $row["SNAME"] . "&nbsp;&nbsp;&nbsp;" . $row["NAGE"]. "&nbsp;&nbsp;&nbsp;" . $row["BGENDER"] . "<br>";
}

/* 释放资源 */
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: 取得结果数据

作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-10
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值