Nginx下PHP连接到GBase 8s数据库 - PDO_GBASEDBT方式

2024-04-23 12:52

本文主要是介绍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源

# 安装nginx需要使用epel源
yum -y install epel-releaseyum -y install nginx

安装php及php-fpm支持

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配置文件中

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
!

重新加载

ldconfig

php-fpm配置

编辑/etc/php-fpm.d/www.conf配置文件

; 修改user和group值为ngingx,因为nginx使用nginx用户及组
user = nginx
group = nginx; 打开环境变量配置参数
clear_env = no
; 使用PDO_GBASEDBT连接时需要配置以下环境变量
env[GBASEDBTDIR] = /opt/gbase8s-odbc-driver

启动php-fpm,并加入到systemctl自启动

systemctl start php-fpmsystemctl enable php-fpm

PDO_GBASEDBT集成

下载pdo_gbasedbt

wget https://gbasedbt.com/dl/PDO_GBasedbt/PDO_GBASEDBT-1.3.6.tgz

编译安装

# 解压
tar -zxvf PDO_GBASEDBT-1.3.6.tgzcd PDO_GBASEDBT-1.3.6# 使用phpize集成  
phpize# 编译,指定CSDK安装目录  
./configure --with-pdo-gbasedbt=/opt/gbase8s-odbc-drivermakemake install

将在/usr/lib64/php/modules/目录下增加pdo_gbasedbt.so
在/etc/php.d/目录下增加pdo_gbasedbt.ini配置文件,内容如下:

cat > /etc/php.d/pdo_gbasedbt.ini <<!
extension=pdo_gbasedbt.so
!

重启php-fpm服务生效

systemctl restart php-fpm

通过php -m 查看已经加载的模块

php -m | grep -i pdo_gbasedbt

nginx配置

编辑/etc/nginx/nginx.conf配置文件
在server中增加

        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自启动

systemctl start nginxsystemctl enable nginx

测试数据库操作

在/usr/share/nginx/html目录下编辑测试代码pdoodbc.php

<?phpheader('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

初始化表 tabpdogbasedbt
drop table tabpdogbasedbt
create table tabpdogbasedbt
insert into tabpdogbasedbt
select from tabpdogbasedbt
col1	col2
1	南大通用
2	南大通用北京分公司

这篇关于Nginx下PHP连接到GBase 8s数据库 - PDO_GBASEDBT方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928847

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.