开发工具:liunx centos7.6系统
开发对象:针对php类
开发语言:php 7.3.31
开发准备:liunx操作系统提前安装好DM8库环境,并设置环境变量LD_LIBRARY_PATH为依赖文件libdmdpi.so存放的路径
步骤:
- 下载源码包php-7.3.3tar.gz包并上传至服务器并解压和编译安装
#解压 tar -xvzf php-7.3.31.tar.gz ./configure --prefix=/soft/php/ --with-config-file-path=/soft/php #编译源码包的过程中遇到赖包问题,安装对应依赖包 yum -y install libxml2* #重新编译安装 ./configure --prefix=/soft/php/ --with-config-file-path=/soft/php make && make install #创建软链接 ln -s /soft/php/bin/php /usr/bin/php |
以下是编译安装完成截图:
- 配置DM PHP驱动
cp php.ini-production /soft/php/php.ini
php -v
编辑php.ini 添加以下内容(extension_dir, extension指定到dm8库环境中对应pdo扩展的so文件,此版本对应libphp73_dm.so)
[PHP_DM] extension_dir ="/home/dmdba/dmdbms/drivers/php_pdo" extension=libphp73_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 |
使用php -m | grep DM 命令验证DM PHP 驱动模块是否加载成功,如下图
3. 开发示例
PHP 接口登录、登出示例程序 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/>"; } ?> |
使用php php_conn.php调试运行
当上述配置中dm_connect中端口设置错误如51236时
$link = dm_connect("localhost:51236", "SYSDBA", "SYSDBA")
or die("Could not connect : " . dm_error()."\n")
报错如下:
正确的运行结果如下;
PHP 接口增、删、改、查四个基本操作,示例程序vi subject.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"; //初始化创建subject表 $result = dm_exec($link, 'create table subject(name varchar2,score int)') or die("Query failed : " . dm_error()."\n"); print "php: create table success"."\n"; //插入数据 $result = dm_exec($link, "insert into subject values('语文',119)") or die("Query failed : " . dm_error()."\n"); print "php: insert success"."\n"; //插入数据 $result = dm_exec($link, "insert into subject values('数学',133)") or die("Query failed : " . dm_error()."\n"); print "php: insert success"."\n"; //插入数据 $result = dm_exec($link, "insert into subject values('英语',140)") or die("Query failed : " . dm_error()."\n"); print "php: insert success"."\n"; //删除数据 $result = dm_exec($link, "delete from subject where name='数学'") or die("Query failed : " . dm_error()."\n"); print "php: delete success"."\n"; //更新数据 $result = dm_exec($link, 'update subject set name = \'英语-新课标\' where name=\'英语\'') or die("Query failed : " . dm_error()."\n"); print "php: update success"."\n"; //查询数据 $result = dm_exec($link, "select * from subject") 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/>"; } ?> |
php subject.php 脚本调用运行结果如下:
更多资讯请上达梦技术社区了解: https://eco.dameng.com