|
书接上回《达梦数据库实操宝典完整版》,我们安装了达梦数据库的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(&#34;localhost:5236&#34;, &#34;test&#34;, &#34;123456!@#&#34;)
or die(&#34;Could not connect : &#34; . dm_error().&#34;\n&#34;);
浏览器访问,结果输出错误,
Could not connect : -70089
这个错误的原因是缺少一个加密库,执行如下命令,
cp /dm8/bin/libcrypto.so /usr/lib/
service php-fpm restart
重新访问发现错误消除了。
接下来补充上完整的逻辑,
<?php
$link = dm_connect(&#34;localhost:5236&#34;, &#34;test&#34;, &#34;123456!@#&#34;)
or die(&#34;Could not connect : &#34; . dm_error().&#34;\n&#34;);
$action = $_GET[&#39;action&#39;] ?? &#39;index&#39;;
$data = [];
do {
if ($action == &#34;index&#34;) {
$result = dm_exec($link, &#39;select * from employee&#39;);
while ($line = dm_fetch_array($result))
{
$data[] = $line;
}
break;
}
if ($action == &#39;create&#39;) {
$tmpl = &#39;insert into employee (employee_id, employee_name, hire_date, salary, department_id) values (?, ?, ?, ?, ?)&#39;;
$stmt = dm_prepare($link, $tmpl);
$result = dm_execute($stmt, [
$_GET[&#39;employee_id&#39;], $_GET[&#39;employee_name&#39;], date(&#39;Y-m-d H:i:s&#39;),
$_GET[&#39;salary&#39;], $_GET[&#39;department_id&#39;]]) or die(&#34;Query failed : &#34; . dm_error().&#34;\n&#34;); ;
header(&#39;Location:./test.php&#39;);
exit;
break;
}
if ($action == &#39;del&#39;) {
dm_exec($link, sprintf(&#39;delete from employee where employee_id = %s&#39;, $_GET[&#39;id&#39;])) or die(&#34;Query failed : &#34; . dm_error().&#34;\n&#34;);
header(&#39;Location:./test.php&#39;);
exit;
}
} while(false);
<html>
<head>
<meta charset=&#34;utf8&#34;/>
</head>
<form>
<input type=&#34;hidden&#34; name=&#34;action&#34; value=&#34;create&#34;>
employee_id:<input type=&#34;text&#34; name=&#34;employee_id&#34;>
employee_name:<input type=&#34;text&#34; name=&#34;employee_name&#34;>
salary:<input type=&#34;text&#34; name=&#34;salary&#34;>
department_id:<input type=&#34;text&#34; name=&#34;department_id&#34;>
<input type=&#34;submit&#34;>
</form>
<?php
foreach($data as $item) {
echo &#39;<div>id=&#39; . $item[&#39;EMPLOYEE_ID&#39;] . &#39;, name=&#39; . $item[&#39;EMPLOYEE_NAME&#39;] .&#39; <a href=&#34;./test.php?action=del&id=&#39;. $item[&#39;EMPLOYEE_
ID&#39;].&#39;&#34;>del</a></div>&#39;;
}
?>
</html>
效果展示如下:

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