之梦不兼容php7,PHP7连接并使用达梦数据库DM8

安装

DM8 windowsX64版下载地址:

http://www.dameng.com/down.aspx?TypeId=11&FId=t14:11:14

创建数据库实例

58072f968ee05930220a12da9cfdee46.png

指定数据库名、实例名及端口号

971395a037ad89d87ef6ae5d7fa2aa95.png

设置初始化参数

字符集设置为UTF-8,去掉字符串大小写敏感

f14586de75c4372fd9ae503665d99b1b.png

设置密码

e91bb798d178ea47c3fd9c2a9da8d475.png

3b4ac45baa1d7ed1f68b7cafa0aa4487.png

创建成功后,系统服务里面将新增加一个服务,如果需要删除该数据库时,需要先停止该服务:

7c006ec5c3cbb201cab5082fe2faa403.png

管理数据库

新建模式

运行DM管理工具,连接localhot这个数据库,选中模式,右键,新建模式:

139d8784ce6645b3de9dca481e251ce9.png

新建一个名为test的模式。

新建表

打开刚创建的test模式,选中表,右键,点击新建表:

8d39d3ae6a9bf4b4e736b9d340569922.png

新建一个名为users的表,注意设置id字段为主键,并可自增长。

选择新建的users表,右键,选择浏览数据:

e87faa6e40f316dd8dcd4a7cccd7ba83.png

在右侧的数据窗口,可以任意录入几条测试数据,方便后面测试使用。

查询表数据

新建查询,输入sql语句,点击执行即可查看表数据:

select * from test.users

263a780605350a7e0b7ff9037879afe6.png

配置PHP(PDO接口)

由于目前最新版的达梦最高只支持到PHP 7.2版本,这里以7.2为例

在达梦的安装包目录下找到pdo72_dm.dll(注意查看phpinfo,如果Thread Safet为enabled,则选择该文件,否则选择pdo72nts_dm.dll)

a493d89b73d706f3f17c3be4b201ba57.png

将该文件拷贝至php的扩展模板下(扩展目录通过查看phpinfo里面的extension_dir值)

然后在php.ini的末尾添加一行:

extension=pdo72_dm.dll

打开cmd命令行,输入php -m,如果提示PHP Fatal error: Unable to start DM module in Unknown on line 0错误:

b9b7ae6fcff7af0ad430166a05682c8e.png

尝试将数据库安装目录bin下的以下dll文件拷贝至C:\Windows\SysWOW64和C:\Windows\System32,重新启动Apache。

dmdpi.dll

dmcalc.dll

dmelog.dll

dmmem.dll

dmos.dll

dmcomm.dll

dmcpr.dll

dmcyt.dll

dmstrt.dll

dmclientlex.dll

dmdta.dll

dmcfg.dll

dmdcr.dll

dmmout.dll

dmcvt.dll

dmmsg.dll

如果还不行就尝试把bin所有的dll文件拷贝过去。

b844f58c7e6e85bde610b783471a2217.png

b0f30b1e1cf653b5bebd0616cd1428c1.png

连接数据库

date_default_timezone_set("Asia/Shanghai");

header("Content-type:text/html; Charset=utf-8");

$dm_conf = array(

'host'=> '127.0.0.1:5236', //连接地址及端口

'db'=> 'DBNAME', //数据库名

'db_user' => 'SYSDBA', //用户名

'db_pwd'=> '123456789', //密码

);

$pdo = new PDO("dm:host=".$dm_conf['host'].";dbname=".$dm_conf['db']."",$dm_conf['db_user'],$dm_conf['db_pwd']);

创建表

$sql = 'create table "test"."users"

(

"id" INTEGER identity(1, 1) not null ,

"user_name" VARCHAR(20),

"created_at" DATETIME(0),

"updated_at" TIMESTAMP(0) DEFAULT sysdate,

primary key("id")

)';

$result = $pdo->exec($sql);

说明:

在表中创建一个自增列。

语法格式:

IDENTITY [ (种子, 增量) ]

插入数据

$sql = "insert into test.users (user_name,created_at,updated_at) values ('张三','2020-07-17 10:06:00','".date('Y-m-d H:i:s')."')";

$result = $pdo->exec($sql);

查询数据

$sql = "select * from test.users;";

$stmt = $pdo->prepare($sql);

if($stmt===false){

var_dump($pdo->errorInfo());die;

}

$rs = $stmt->execute();

if ($rs) {

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

$row = array_change_key_case($row,CASE_LOWER); //将数组的key转为小写

var_dump($row);

}

}

更新数据

$sql = "update test.users set user_name = '李四' where id = 1";

$result = $pdo->exec($sql);

删除数据

$sql = "delete from test.users where id = 1";

$result = $pdo->exec($sql);

配置PHP(面向对象接口)

以7.2为例

在达梦的安装包目录下找到php72_dm.dll(注意查看phpinfo,如果Thread Safet为enabled,则选择该文件,否则选择php72nts_dm.dll)

将该文件拷贝至php的扩展模板下(扩展目录通过查看phpinfo里面的extension_dir值)

然后在php.ini的末尾添加一行:

extension=php72_dm.dll

重启服务器,然后查看phpinfo

c0cb1b309624f426aa1e06c2b3b0b7e9.png

如出现以上内容,则说明配置成功。

连接数据库

$link = dm_connect("localhost", "SYSDBA", "SYSDBA");

if(!$link){

echo dm_error().':'.dm_errormsg();exit();

}

dm_setoption($link,1,12345,1); //设置 dm 连接和语句的相关属性,设置UTF8

创建表

$sql = 'create table "test"."users1"

(

"id" INTEGER identity(1, 1) not null,

"user_name" VARCHAR(20),

"created_at" DATETIME(0),

"updated_at" TIMESTAMP(0) DEFAULT sysdate,

primary key("id")

)';

$result = dm_exec($link,$sql);

插入数据

$sql = "insert into test.users1 (user_name,created_at,updated_at) values ('张三','2020-07-17 10:06:00','".date('Y-m-d H:i:s')."')";

$result = dm_exec($link,$sql);

查询数据

$sql = "select * from test.users limit 10";

$result = dm_exec($link,$sql);

print " 查询结果:";

while ($line = dm_fetch_array($result)){

print_r($line);

echo '

';

}

更新数据

$sql = "update test.users set user_name = '李四' where id = 1";

$result = dm_exec($link,$sql);

删除数据

$sql = "delete from test.users where id = 1";

$result = dm_exec($link,$sql);

设置默认模式

通常情况下,在sql语句中的表名前需要指定模式名。例如上面例子中的test.users,其中test就是模式名,users是表名。

可以通过SET SCHEMA设置当前模式。设置后,执行sql语句时,就可以省略模式名。

语法格式:

SET SCHEMA ;

其他

查看数据库库名

select name,create_time from v$database;

查看数据库实例名及状态

select name,instance_name,start_time,status$ from v$instance;

查看数据库里所有使用用户

select username,user_id,default_tablespace,profile from dba_users;

查看所有角色

select role from dba_roles;

查看当前时间

SELECT CURRENT_TIMESTAMP();

查看数据库版本

SELECT * FROM V$VERSION;

PDO下中文乱码

打开C:\windows\System32\dm_svc.conf文件,新增一行:

CHAR_CODE=(PG_UTF8)

保存后重启apache

获得系统建库时指定字符集

SELECT SF_GET_UNICODE_FLAG ();

0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR

查看是否开启归档模式

select name,arch_mode from v$database;

查看库中所有表

SELECT * FROM ALL_TABLES;

当前用户拥有的所有的表

select table_name from user_tables

查看数据表定义

SELECT TABLEDEF('SYSDBA','MY_TABLE'); --入参:模式名,表名

查看字段注释

select * from user_col_comments where Table_Name='xxx'

获取最后插入的自增ID

SELECT @@IDENTITY as insert_id

group by时,查询的字段必须出现group by 后面

MySQL可以通过any_value来添加没有出现在group by后面的字段,但是达梦不支持,可以把any_value改成min

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值