本文将介绍 Windows 下 PHP PDO 方式连接达梦数据库。
1、官网下载:https://www.dameng.com/
根据需要完整安装或只安装管理工具。
2、完成后,将安装目录下 \bin 添加到系统环境变量中。
3、打开安装目录下 drivers\php_pdo 目录
4、确定你的 PHP 配置,并在 php_pdo 目录中,搜索需要的版本,*74*.dll(右上角搜索框)
如,结果为:
php74nts_dm.dll
php74_dm.dll
pdo74nts_dm.dll
pdo74_dm.dll
包含,nts 为,非线程安全版本。
5、复制 dll 到 PHP 指定版本 ext 目录。
如,我使用的是,php7.4.3nts。
因此,我需要复制,php74nts_dm.dll、pdo74nts_dm.dll。
6、在 php.ini 中增加配置
extension=php74nts_dm.dll
extension=pdo74nts_dm.dll
并确定,extension_dir 配置项,设置了ext 所在目录。
7、根据需要增加达梦数据库配置(可以忽略)
[DM] ; 端口 dm.port=5237 ; 是否允许持久性连接 dm.allow_persistent = 1 ; 允许建立持久性连接的最大数. -1 为没有限制. dm.max_persistent = -1 ; 允许建立连接的最大数(包括持久性连接). -1 为没有限制. dm.max_links = -1 ; 默认的主机地址 dm.default_host = 127.0.0.1 ; 默认登录的数据库 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
8、查看配置
如果设置了 PHP 环境变量,则可以输入以下命令,来查看 PHP 配置。
php -r "echo '<pre>',phpinfo(),'</pre>';" > info.html
完成后,会在当前目录创建 info.html 文件。打开中,查询 DM,以确定加载成功。
9、连接测试
<?php // 连接达梦数据库 $dsn = "dm:host=127.0.0.1;port=5236;dbname=CONTRACTOR;charset=utf8"; $username = "CONTRACTOR"; $password = "123456"; $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); try { $conn = new PDO($dsn, $username, $password, $options); echo "PDO 连接成功!"; } catch (PDOException $e) { echo "连接失败: " . $e->getMessage(); } ?>
关于写入乱码问题:
在 C:\Windows\System32\dm_svc.conf 中,增加:
CHAR_CODE=(PG_UTF8)
关于load fun EVP_sm3_fun fail! 错误:
将 drivers\dpi\ 下,libeay32.dll、ssleay32.dll 文件,复制到 PHP 程序目录,如 \php\php7.4.3nts 即可。
参考: