香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 94|回复: 0

达梦数据库之PHP实战篇

[复制链接]

2

主题

6

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-1-17 13:53:30 | 显示全部楼层 |阅读模式
书接上回《达梦数据库实操宝典完整版》,我们安装了达梦数据库的linux版本。俗话说的好,光说不练假把式,本篇文章我们会手把手的教大家如何在php中集成dm数据库扩展,并通过这个扩展实现一个简单的员工管理系统。
前置条件

假设用户已经安装好了

  • centos 7.2
  • nginx
  • php-fpm
  • php7.2
  • 达梦数据库
php 扩展安装

有之前安装过php其他扩展经验的同学,肯定在想安装一个php扩展不就是首先找到扩展源码,执行phpize,然后./configure一下就能顺利安装,还要发一篇文章吗?橘猫一开始也是这么想的,结果怎么也没有找到对应的源码, 经过一番查找,发现达梦数据库已经非常贴心的编译好了的so文件放在drivers/php_pdo目录下。废话不多说,正式进入安装:
首先执行如下命令,
php -i|grep extension
输出,
extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

MongoDB extension version => 1.7.4

MongoDB extension stability => stable

sqlite3.extension_dir => no value => no value
定位出php的扩展安装目录在/usr/lib64/php/modules中,接下来假设你安装的dm数据库在/dm8 目录中,执行如下命令,
cp /dm8/drivers/php_pdo/libphp72_dm.so /usr/lib64/php/modules
找到php.ini 在末尾行插入,
extension=libphp72_dm.so
执行,
php -m
如果输出项目中有,
[PHP Modules]

bz2

calendar

Core

ctype

curl

date

DM // ------> 这个

dom

exif
那么恭喜你安装成功。
php-fpm集成

经过刚刚的操作,你肯定迫不及待的执行,
service php-fpm restart
不出意外的话你会收获如下报错,
Redirecting to /bin/systemctl start php-fpm.service

Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details.
php启动失败了,遇到这个问题怎么处理呢?我直接贴出解决方案吧!
执行如下命令,
cd /etc/ld.so.conf.d

vi dm.conf
假设你数据库的安装目录在/dm8/; 输入,
/dm8/bin
执行,
ldconfig
输出,
ldconfig: /dm8/bin/libxerces-c-3.1.so is not a symbolic link
这个错误直接跳过即可,
执行,
service php-fpm restart
php-fpm集成dm数据库扩展成功。
达梦数据库常用sql

达梦数据库和mysql还是有一定程度的区别,作为刚刚使用这个数据库的开发人员中很多mysql中的经验都无法复用,在这里我提供一些常见的sql供大家使用
创建用户,
CREATE USER DM IDENTIFIED BY "dameng123";
授权,
GRANT RESOURCE TO DM;
登录,
conn DM/dameng123;
查看所有的表名,类似mysql的show tables,
select table_name,tablespace_name from user_tables;
执行外部文件sql,
start ~/xx.sql
系统所有表查询,
select OWNER,TABLE_NAME,TABLESPACE_NAME from dba_tables;
登录用户所有表查询,
select TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME from user_tables
表空间查询,
select TABLESPACE_NAME,BLOCK_SIZE from user_tablespaces;
系统所有用户查询,
select USERNAME,USER_ID,PASSWORD from dba_users;
删除表,
drop table table_name;
显示会话的具体信息,如执行的 sql 语句、主库名、当前会话状态、用户名等等,
select * from  v$sessions:
查看当前数据库中锁的信息,
select * from  v$lock:
显示所有的内存池信息,
select * from  v$mem_pool:
记录死锁的历史信息,
select * from  V$deadlock_histor
显示表空间信息,不包括回滚表空间信息,
select * from  V$TABLESPACE:
显示所有活动事务的信息。通过该视图可以查看所有系统中所有的事务以及相关信息,如锁信息等,
select * from  V$TRX:
查看表结构,
// EMPLOYEE 表名  TEST用户名 按照实际情况替换

SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEE','TEST') FROM dual;

SP_TABLEDEF('TEST','EMPLOYEE');
web代码

接下来到了激动人心的时刻,新建test.php,
<?php


$link = dm_connect("localhost:5236", "test", "123456!@#")

        or die("Could not connect : " . dm_error()."\n");
浏览器访问,结果输出错误,
Could not connect : -70089
这个错误的原因是缺少一个加密库,执行如下命令,
cp /dm8/bin/libcrypto.so /usr/lib/

service php-fpm restart
重新访问发现错误消除了。
接下来补充上完整的逻辑,
<?php


$link = dm_connect("localhost:5236", "test", "123456!@#")

or die("Could not connect : " . dm_error()."\n");



$action = $_GET['action'] ?? 'index';

$data = [];

do {


        if ($action == "index") {


                $result = dm_exec($link, 'select * from employee');

                while ($line = dm_fetch_array($result))

                {

                        $data[] = $line;

                }

                break;

        }

        if ($action == 'create') {


                $tmpl = 'insert into employee (employee_id, employee_name, hire_date, salary, department_id) values (?, ?, ?, ?, ?)';

                $stmt = dm_prepare($link, $tmpl);

                $result = dm_execute($stmt, [

                                $_GET['employee_id'], $_GET['employee_name'], date('Y-m-d H:i:s'),

                                $_GET['salary'], $_GET['department_id']]) or die("Query failed : " . dm_error()."\n"); ;

                header('Location:./test.php');

                exit;

                break;


        }

        if ($action == 'del') {

                dm_exec($link, sprintf('delete from employee where employee_id = %s', $_GET['id'])) or die("Query failed : " . dm_error()."\n");

                header('Location:./test.php');

                exit;

        }


} while(false);

<html>

<head>

<meta charset="utf8"/>

</head>

<form>

<input type="hidden" name="action" value="create">

employee_id:<input type="text" name="employee_id">

employee_name:<input type="text" name="employee_name">

salary:<input type="text" name="salary">

department_id:<input type="text" name="department_id">

<input type="submit">

</form>

<?php

foreach($data as $item) {

        echo '<div>id=' . $item['EMPLOYEE_ID'] . ', name=' . $item['EMPLOYEE_NAME'] .' <a href="./test.php?action=del&id='. $item['EMPLOYEE_

ID'].'">del</a></div>';

}

?>

</html>
效果展示如下:


总结
通过这篇文章,我们从安装php扩展到实现一个简单的网页都一一进行了介绍,其中可能遇到的问题也给出了具体的解决方案,橘猫希望这篇文章能给刚刚使用达梦数据库的同学带来一点点帮助。
有问题可私信,橘猫会一一解答。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-3-15 19:29 , Processed in 0.560731 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表