PHP连接达梦数据库

背景

PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。

PHP 数据对象(PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个具体数据库的 PDO 驱动来访问数据库服务。

软件版本
DM数据库DM8
PHP7.3.33

1. 下载PHP包

https://www.php.net/downloads

本次使用的PHP安装包为:php-7.3.33.tar.bz2 (资料包中也有)

2. 编译php包

## 1. 上传压缩包上传到 /soft目录
[root@dw1 ~] cd /soft ## 上传压缩包
# 2. 解压PHP安装包
[root@dw1 soft]# tar -jxvf php-7.3.33.tar.bz2 
## 源码安装3步骤:配置(configure)、编译(make)、安装(make install)

## 进入php源码目录 php-7.3.33
[root@dw1 ~]# cd php-7.3.33/
## 可以下载yum这两个包,编译时用
[root@dw1 ~]# yum install libxml2-devel
[root@dw1 ~]# yum install sqlite-devel
## 3. 指定PHP的安装目录为:/root/php,并将php.ini的路径设置为/root/php
[root@dw1 php-7.3.33]# ./configure --prefix=/root/php/ --with-config-file-path=/root/php

## 4. 编译安装PHP(耗时较长)
[root@dw1 php-7.3.33]# make && make install

## 5. 设置软链接
[root@dw1 php-7.3.33]# ln -s /root/php/bin/php /usr/bin/php

## 6.创建php.ini(控制php行为)特别重要
[root@dw1 php-7.3.33]# cp /soft/php-7.3.33/php.ini-production /soft/php/php.ini
## 7. 检查php版本(注意PHP是NTS【非线程安全】的,不提供数据访问保护)
[root@VM-24-17-centos php]# php -v
PHP 7.3.33 (cli) (built: Jan 10 2022 22:40:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies

3. 修改用户的环境变量

[root@iZ2zegdg3jn4k03ylt4m6rZ ~]$ vi ~/.bash_profile
## /opt/dmdbms/bin 是数据库的bin目录 如果本机没有可以不指定
## /opt/dmdbms/drivers/php_pdo PHP拓展所在的目录
##########内容如下##########
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin:/opt/dmdbms/drivers/php_pdo"
export DM_HOME="/opt/dmdbms"
##########内容如下##########
[root@iZ2zegdg3jn4k03ylt4m6rZ ~]$ source ~/.bash_profile

4. 修改php.ini

[root@iZ2zegdg3jn4k03ylt4m6rZ ~]$ cd /root/php
## 1.修改php.ini文件
[root@VM-24-17-centos php]# php -m|grep DM
#### 添加如下内容 
## 注意修改端口号 ip
## 注意
[PHP_DM]
extension_dir="/opt/dmdbms/drivers/php_pdo"
extension=libphp73_dm.so
[dm]
dm.port=5236
dm.allow_persistent = 1
dm.max_persistent = -1
dm.max_links = -1
dm.default_host = localhost
dm.default_db = dmdb
dm.default_user = SYSDBA
dm.default_user = SYSDBA
dm.connect_timeout = 10
dm.defaultlrl = 4096
dm.defaultbinmode = 1
dm.check_persistent = ON

## 2. 验证DM PHP驱动模块是否加载成功
[root@dw1 php]# php -m|grep DM
DM

请添加图片描述

5. 代码测试

1. 测试数据库连接

##编写php_conn.php文件
[root@VM-24-17-centos ~]# cat 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/>";
}
?>

## 2. 测试php
[root@VM-24-17-centos ~]# php php_conn.php 
php: Connected successfully


2.CRUD操作

## 1. 编写php_dml.php 文件
[root@VM-24-17-centos ~]# cat 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 = \'英语-新课标\' 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/>";
}
?>
## 2. 测试php
[root@VM-24-17-centos ~]# php php_dml.php 

3. 测试数据库循环写入

## 1. 编写php_demo.php 文件
[root@VM-24-17-centos ~]# cat php_demo.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"; 
	
	while(true) {
        print "query: select 1 from dual... ";
		
		$result = dm_exec($link, "select 1 from dual") or die("Query failed : " . dm_error()."\n"); 
		

        print "response:" . $result . "\n";
        sleep(5);
    }

    /*释放资源*/ 
    dm_free_result($result); 
    print "php: select success"."\n"; 
    /*断开连接*/ 
    dm_close($link); 
}
catch(Exception $e)
{
    $e->getMessage() . "<br/>";
}
?>

## 2. 测试php
[root@VM-24-17-centos ~]# php php_demo.php

报错

1. configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:

请添加图片描述

解决:执行命令

yum install libxml2-devel

2. configure: error: Package requirements (sqlite3 > 3.7.4) were not met:

yum install sqlite-devel

资料

链接:https://pan.baidu.com/s/14qT4FlSHsO7Z4qbN_25RRw

提取码:7uym

–来自百度网盘超级会员V3的分享

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐