Nginx下PHP连接到GBase 8s数据库 - PDO_GBASEDBT方式
PHP可以通过odbc,pdo_odbc和pdo_gbasedbt三种方式连接到GBase 8s数据库,这三种方式均需要通过CSDK客户端工具。
操作系统:CentOS 7.9 x86_64
必要组件:
- php及扩展,如php-fpm/php-odbc/php-pdo等
- nginx服务
- gcc/gcc-c++
数据库连接工具(CSDK)
- GBase 8s CSDK(需含ESQLC组件)
配置前提
- GBase 8s数据库服务器正常运行
- GBase 8s客户端连接工具
系统环境
Linux关闭selinux(至少需要放行httpd_can_network_connect),通过yum方式安装必要的组件,包含unixODBC/unixODBC-devel,nginx和php-fpm等
CentOS7的nginx服务需要使用epel源
1 2 3 4 | # 安装nginx需要使用epel源 yum -y install epel-release yum -y install nginx |
安装php及php-fpm支持
1 | yum -y install php php-cli php-devel php-fpm php-odbc php-soap php-pdo php-mbstring php-gd php-intl |
GBase 8s客户端连接工具安装及ODBC配置
安装过程省略,指定安装目录为/opt/gbase8s-odbc-driver
需要的LIB库加入到ld.so.conf配置文件中
1 2 3 4 5 | cat > /etc/ld .so.conf.d /gbasedbt-x86_64 .conf <<! /opt/gbase8s-odbc-driver/lib /opt/gbase8s-odbc-dirver/lib/cli /opt/gbase8s-odbc-driver/lib/esql ! |
重新加载
1 | ldconfig |
php-fpm配置
编辑/etc/php-fpm.d/www.conf配置文件
1 2 3 4 5 6 7 8 9 | ; 修改user和group值为ngingx,因为nginx使用nginx用户及组 user = nginx group = nginx ; 打开环境变量配置参数 clear_env = no ; 使用PDO_GBASEDBT连接时需要配置以下环境变量 env[GBASEDBTDIR] = /opt/gbase8s-odbc-driver |
启动php-fpm,并加入到systemctl自启动
1 2 3 | systemctl start php-fpm systemctl enable php-fpm |
PDO_GBASEDBT集成
下载pdo_gbasedbt
1 | wget https: //gbasedbt .com /dl/PDO_GBasedbt/PDO_GBASEDBT-1 .3.6.tgz |
编译安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 解压 tar -zxvf PDO_GBASEDBT-1.3.6.tgz cd PDO_GBASEDBT-1.3.6 # 使用phpize集成 phpize # 编译,指定CSDK安装目录 . /configure --with-pdo-gbasedbt= /opt/gbase8s-odbc-driver make make install |
将在/usr/lib64/php/modules/目录下增加pdo_gbasedbt.so
在/etc/php.d/目录下增加pdo_gbasedbt.ini配置文件,内容如下:
1 2 3 | cat > /etc/php .d /pdo_gbasedbt .ini <<! extension=pdo_gbasedbt.so ! |
重启php-fpm服务生效
1 | systemctl restart php-fpm |
通过php -m 查看已经加载的模块
1 | php -m | grep -i pdo_gbasedbt |
nginx配置
编辑/etc/nginx/nginx.conf配置文件
在server中增加
1 2 3 4 5 6 7 | location ~* \.php$ { # fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } |
启动nginx,并加入到systemctl自启动
1 2 3 | systemctl start nginx systemctl enable nginx |
测试数据库操作
在/usr/share/nginx/html目录下编辑测试代码pdoodbc.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php header( 'Content-type:text/html;charset=utf-8' ); $dbh = new PDO( "gbasedbt:HOST=192.168.80.70;SERV=9088;PROT=onsoctcp;SRVR=gbase01;DB=testdb;DLOC=zh_CN.utf8;CLOC=zh_CN.utf8" , "gbasedbt" , "GBase123$%" ); # 指定数据库连接指令 echo "初始化表 tabpdogbasedbt<br>" ; echo "drop table tabpdogbasedbt<br>" ; $sql = "drop table if exists tabpdogbasedbt" ; $dbh -> exec ( $sql ); echo "create table tabpdogbasedbt<br>" ; $sql = "create table tabpdogbasedbt(col1 int, col2 varchar(255), primary key(col1))" ; $dbh -> exec ( $sql ); echo "insert into tabpdogbasedbt<br>" ; $sql = "insert into tabpdogbasedbt values(?,?)" ; $stmt = $dbh ->prepare( $sql ); $stmt ->execute([1, '南大通用' ]); $stmt = $dbh ->prepare( $sql )->execute([2, '南大通用北京分公司' ]); echo "select from tabpdogbasedbt<br>" ; $sql = "select * from tabpdogbasedbt" ; $stmt = $dbh ->query( $sql ); $rows = $stmt ->fetchAll(); echo "<table><tr>" ; echo "<th>col1</th>" ; echo "<th>col2</th></tr>" ; foreach ( $rows as $row ) { # 需要使用大写字段名称 echo "<tr><td>$row[0]</td>" ; echo "<td>$row[COL2]</td></tr>" ; } echo "</table>" ; |
浏览器中访问odbc.php
1 2 3 4 5 6 7 8 | 初始化表 tabpdogbasedbt drop table tabpdogbasedbt create table tabpdogbasedbt insert into tabpdogbasedbt select from tabpdogbasedbt col1 col2 1 南大通用 2 南大通用北京分公司 |