暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM8达梦数据库PHP 接口

原创 达梦 2021-01-31
2227

DM PHP 是在 PHP 开放源码的基础上开发的一个动态扩展库,接口的实现参考了 MySQL 的 PHP 扩展,无论在功能、参数以及调用过程都和后者十分类似,命名统一采用 dm 开头的小写英文字母方式,各个单词之间以下划线分割。PHP 应用程序可通过 DM PHP 扩展接口库访问 DM 数据库服务器。

开发环境搭建

软件 版本
DM 数据库 DM 8.0 及以上版本
PHP PHP 7.2.2

获取源码编译驱动

获取 python 安装包

先在官网下载 PHP 源码,将下载好的源码上传至服务器。

解压安装包

解压:tar -zxvf php7.2.2.tar.bz2

编译安装

[root@RS1821 php-7.2.34]# ./configure --prefix=/home/soft/php/  --with-config-file-path=/home/soft/php
[root@RS1821 php-7.2.34]# make && make install
[root@RS1821 php-7.2.34]# ln -s /home/soft/php/bin/php /usr/bin/php
[root@RS1821 php-7.2.34]# cp php.ini-production /home/soft/php/php.ini
[root@RS1821 php-7.2.34]# php -v
PHP 7.2.34 (cli) (built: Nov 18 2020 10:57:21) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
[root@RS1821 php-7.2.34]#

配置 DM 驱动

在 php.ini 中添加如下内容:

[PHP_DM]
extension_dir ="/opt/dm8/drivers/php_pdo"
extension=libphp72_dm.so
[dm]
dm.port=5236
; 是否允许持久性连接
dm.allow_persistent = 1
; 允许建立持久性连接的最大数. -1 为没有限制.
dm.max_persistent = -1
; 允许建立连接的最大数(包括持久性连接). -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
;对于各种变长数据类型,每列最大读取的字节数。如果它设置为 0 或是小于 0,那么,读取变长字段时,将显示 NULL 值
dm.defaultlrl = 4096
; 是否读取二进制类型数据,如果它设置为 0,那么二进制将被 NULL 值代替
dm.defaultbinmode = 1
;是否允许检察持久性连接的有效性,如果设置为 ON,那么当重用一个持久性连接时,会检察该连接是否还有效
dm.check_persistent = ON

DM PHP 驱动模块加载成功,如下所示:

[root@RS1821 php]# php -m | grep DM

数据库连接

PHP 接口登录、登出示例程序 php_conn.php 如下:

<?php
header("Content-type:text/html;charset=utf-8"); //防止页面乱码
try
{
$link = dm_connect("localhost:51236", "SYSDBA", "SYSDBA")
or die("Could not connect : " . dm_error()."\n");

//使用 dm_error 会显示 dm 的 php 接口返回的错误,执行成功,则继续往下执行。
print "php: Connected successfully"."\n";

/*断开连接*/
dm_close($link);
}
catch(Exception $e)
{
$e->getMessage() . "<br/>";
}
?>

执行结果如下:

[root@RS1821 phptest]# php php_conn.php 
php: Connected successfully
[root@RS1821 phptest]#

开发示例

基本操作示例

PHP 接口增、删、改、查四个基本操作,示例程序 php_dml.php 如下:

<?php
header("Content-type:text/html;charset=utf-8"); //防止页面乱码
try
{
$link = dm_connect("localhost:51236", "SYSDBA", "SYSDBA")
or die("Could not connect : " . dm_error()."\n");

//使用 dm_error 会显示 dm 的 php 接口返回的错误,执行成功,则继续往下执行。
print "php: Connected successfully"."\n";
//清空表,初始化测试环境
$result = dm_exec($link, 'delete from PRODUCTION.PRODUCT_CATEGORY') or die("Query failed : " . dm_error()."\n");


//插入数据
$result = dm_exec($link, "insert into PRODUCTION.PRODUCT_CATEGORY(NAME) values('语文'), ('数学'), ('英语'), ('体育')")
or die("Query failed : " . dm_error()."\n");
print "php: insert success"."\n";

//删除数据
$result = dm_exec($link, "delete from PRODUCTION.PRODUCT_CATEGORY where name='数学'") or die("Query failed : " . dm_error()."\n");
print "php: delete success"."\n";

//更新数据
$result = dm_exec($link, 'update PRODUCTION.PRODUCT_CATEGORY set name = \'英语-新课标\' where name=\'英语\'') or die("Query failed : " . dm_error()."\n");
print "php: update success"."\n";

//查询数据
$result = dm_exec($link, "select * from PRODUCTION.PRODUCT_CATEGORY") or die("Query failed : " . dm_error()."\n");
print "<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\">\n";
while ($line = dm_fetch_array($result))
{
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";

}
print "</table>\n";

/*释放资源*/
dm_free_result($result);
print "php: select success"."\n";


/*断开连接*/
dm_close($link);
}
catch(Exception $e)
{
$e->getMessage() . "<br/>";
}
?>

执行结果如下:

[root@RS1821 phptest]# php php_dml.php 
php: Connected successfully
php: insert success
php: delete success
php: update success
<table border="1" cellspacing="1" cellpadding="1">
<tr>
<td>118</td>
<td>语文</td>
</tr>
<tr>
<td>120</td>
<td>英语-新课标</td>
</tr>
<tr>
<td>121</td>
<td>体育</td>
</tr>
</table>
php: select success
[root@RS1821 phptest]#

绑定变量示例

PHP 接口绑定变量示例程序 php_bind.php 如下:

<?php
header("Content-type:text/html;charset=utf-8"); //防止页面乱码
try
{
$link = dm_connect("localhost:51236", "SYSDBA", "SYSDBA")
or die("Could not connect : " . dm_error()."\n");

//使用 dm_error 会显示 dm 的 php 接口返回的错误,执行成功,则继续往下执行。
print "php: Connected successfully"."\n";

//清空表,初始化测试环境
$result = dm_exec($link, 'delete from PRODUCTION.PRODUCT_CATEGORY') or die("Query failed : " . dm_error()."\n");

//绑定参数方式插入数据
$a = '物理';
$stmt = dm_prepare($link, 'insert into PRODUCTION.PRODUCT_CATEGORY(name) values(?)');
$result = dm_execute($stmt, array($a)) or die("Query failed : " . dm_error()."\n"); ;
print "php: insert with bind successfully"."\n";

//查询数据
$result = dm_exec($link, "select * from PRODUCTION.PRODUCT_CATEGORY") or die("Query failed : " . dm_error()."\n");
print "<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\">\n";
while ($line = dm_fetch_array($result))
{
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";

}
print "</table>\n";
print "php: select successfully"."\n";

/*断开连接*/
dm_close($link);
}
catch(Exception $e)
{
$e->getMessage() . "<br/>";
}
?>

执行结果如下:

[root@RS1821 phptest]# php php_bind.php
php: Connected successfully
php: insert with bind successfully
<table border="1" cellspacing="1" cellpadding="1">
<tr>
<td>124</td>
<td>物理</td>
</tr>
</table>
php: select successfully
[root@RS1821 phptest]#
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论