DM PHP接口连接
-
简介
DM PHP 是在 PHP 开放源码的基础上开发的一个动态扩展库,接口的实现参考了 MySQL 的 PHP 扩展,无论在功能、参数以及调用过程都和后者十分类似,命名统一采用 dm 开头的小写英文字母方式,各个单词之间以下划线分割。PHP 应用程序可通过 DM PHP 扩展接口库访问 DM 数据库服务器。
-
部署环境
表2‑1 部署环境
系统版本 |
Centos7.9 |
CPU型号 |
Intel(R) i5-7200U CPU (2核) |
磁盘空间 |
40G |
内存大小 |
2G |
PHP版本 |
7.2.2 |
表2‑2 磁盘规划
数据 |
/dev/mapper/vg_dm-lv_dmdata |
备份 |
/dev/mapper/vg_dm-lv_dmbak |
归档 |
/dev/mapper/vg_dm-lv_arch |
表2‑3 目录规划
数据库软件安装目录 |
/home/dmdba/dmdbms |
实例安装目录 |
/dmdata |
归档存放目录 |
/dmdata/arch |
备份存放目录 |
/dmdata/dmbak/ |
-
达梦数据库PHP接口
-
安装PHP编译与使用依赖环境
-
yum install wget gcc libxml2 libxml2-devel sqlite-devel -y |
3-1依赖环境安装成功
-
获取 PHP 安装包
通过wget方式进行下载PHP 7.2.2版本后解压,并进行编译安装
wget http://hk1.php.net/get/php-7.2.2.tar.gz/from/this/mirror tar -zxvf mirror cd php-7.2.2/ ./configure --prefix=/home/soft/php/ --with-config-file-path=/home/soft/php make && make install ln -s /home/soft/php/bin/php /usr/bin/php //创建链接 cp php.ini-production /home/soft/php/php.ini php -v |
3-2 PHP编译安装
3-3 PHP安装成功
-
配置 DM 驱动
在 php.ini 中添加如下内容,按照实际情况适当修改以下参数(运行检验前需要配置达梦数据库环境变量.bash_profile参数):
[PHP_DM] extension_dir ="/home/dmdba/dmdbms/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 |
3-4验证驱动模块加载成功
-
PHP与数据库连接
PHP 接口登录、登出示例程序 php_conn.php 如下:
mkdir /home/soft/php/bin/php/phptest cd /home/soft/php/bin/php/phptest vi php_conn.php
<?php header("Content-type:text/html;charset=utf-8"); //防止页面乱码 try { $link = dm_connect("localhost:5236", "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/>"; } ?> |
3-5 PHP与数据库连接成功
-
使用PHP对数据库增删改查
PHP 接口增、删、改、查四个基本操作,示例程序 php_dml.php 如下:
<?php header("Content-type:text/html;charset=utf-8"); //防止页面乱码 try { $link = dm_connect("localhost:5236", "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 = \'DM技术部\' 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/>"; } ?> |
3-6增删改查执行成功
-
PHP 接口绑定变量
PHP 接口绑定变量示例程序 php_bind.php 如下:
<?php header("Content-type:text/html;charset=utf-8"); //防止页面乱码 try { $link = dm_connect("localhost:5236", "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/>"; } ?> |
3-7 接口绑定变量
技术社区地址:https://eco.dameng.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示