PHP 数据库接口

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

开发环境搭建

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

获取源码编译驱动

获取 PHP 安装包

先在官网下载 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]#
微信扫码
分享文档
扫一扫
联系客服