安装PHP
下载PHP,使用ts版本
windows.php.net - /downloads/releases/archives/
目前 DM 支持的 PHP 版本为 PHP 5.2、5.3 、5.4 、5.5 、5.6 和 PHP 7.0、7.1、7.2、7.3、7.4,凝思操作系统只支持到 PHP7.2,用户可根据自己安装的 PHP 版本选择对应的接口库。
解压之后,配置达梦数据库模块
- 拷贝 drivers\php_pdo 目录下 php72_dm.dll 和pdo72_dm.dll到 php 目录下的 ext 目录中,修改 php.ini,添加 php.ini 中有关连接的配置;拷贝 bin 目录下依赖的库文件 dmdpi.dll 到 php 目录下的 ext 目录中。
- 修改php配置文件(php.ini-development重命名为php.ini)
修改extension_dir
extension_dir = "E:\Formoney\php\ext"
添加达梦数据库相关模块
extension=php72_dm.dll
extension=pdo72_dm.dll
添加默认连接
[PHP_DM]
extension_dir ="D:\dmdbms\drivers\php_pdo"
[dm]
dm.port=5237
; 是否允许持久性连接
dm.allow_persistent = 1
; 允许建立持久性连接的最大数. -1 为没有限制.
dm.max_persistent = -1
; 允许建立连接的最大数(包括持久性连接). -1 为没有限制.
dm.max_links = -1
; 默认的主机地址
dm.default_host = 192.168.65.150
; 默认登录的数据库
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
安装Apache
apache 下载地址
https://httpd.apache.org/
页面打开后会有一段说明文字:
大致意思是说apache本身不提供已编译的安装包,只提供源码,如果你自己无法编译,可以选择下面这些官方推荐的第三方提供编译的网站。
其中后两个是有名的wamp以及xampp集成环境,如果只想下载apache可以选择前三个网站,这里我们以第一个ApacheHaus为例。
打开ApacheHaus之后你会发现这个网站上有各种windows版本,可以尽情选择你要下载的版本。
下载到本地解压之后,修改httpd.conf
修改Define SRVROOT "E:\Formoney\Apache24" 为解压的地址
修改监听端口 Listen 8080
添加以下内容:
#让Apache载入PHP处理模块,按照实际路径修改
LoadModule php7_module "E:\Formoney\php\php7apache2_4.dll"
PHPINIDir "E:\Formoney\php"
AddType application/x-httpd-php .php
DirectoryIndex default.php default.phtml default.php3 default.html default.htm
AddType application/x-httpd-php .php .phtml .php3 .inc
AddType application/x-httpd-php-source .phps
添加php解析
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
安装httpd,使用管理员启动cmd
启动httpd
httpd.exe -k start
httpd.exe -k stop
httpd.exe -k restart
编写测试文件
出现DM模块说明配置成功
连接测试文件
<?php
header("Content-type:text/html;charset=utf-8"); //防止页面乱码
try
{
$link = dm_connect("192.168.65.150:5237", "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 使用 PDO 连接达梦出现中文乱码
【问题描述】:
数据库初始化为 UTF8 编码,在达梦所在服务器 dm_svc.conf 配置文件设置了 utf8 编码,PDO 也设置了 UTF8 编码,但仍然在 utf8 编码下出现乱码。
【问题解决】:
通过设置应用端的 dm_svc.conf 文件,设置/添加 CHAR_CODE=(PG_UTF8)
,修改完后重启 fpm 即可。
如果应用端没有安装达梦数据库,可以从安装达梦数据库所在服务器如下目录去拷贝 dm_svc.conf 文件,或者可以在应用端自行创建 dm_svc.conf 文件放在如下目录。
安装达梦数据库所在服务器 dm_svc.conf 文件默认路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。
基础操作示例
基础增删改查示例代码: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/>";
}?>
运行示例截图。运行后终端输出如下图所示:
绑定变量示例
绑定参数示例代码:php_bind.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");
//绑定参数方式插入数据
$a = '物理';
$stmt = dm_prepare($link, 'insert into PRODUCTION.PRODUCT_CATEGORY(name) values(?)');
$result = dm_execute($stmt, array($a)) or die("Query failed : " . dm_error()."\n"); ;
print "php: insert with bind successfully"."\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";
print "php: select successfully"."\n";
/*断开连接*/
dm_close($link);
}catch(Exception $e)
{
$e->getMessage() . "<br/>";
}?>f
运行示例截图。运行后终端输出如下图所示: