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");
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");
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");
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]#
|