网站首页mysql
编译安装pdo_oci扩展,使用PHP连接oracle
发布时间:2018-10-18 08:10:55编辑:slayer.hover阅读(3168)
在centos上使用PHP的PDO模块连接oracle数据库时,提示:could not find driver, 应该是pdo的oracle模块没安装。
1. 下载PHP7.2最新源码包和oracle的客户端。
oracle当前最新客户端的rpm包:
basic包oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
devel包oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm
安装:
rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm rpm -ivh oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm
2. 导入环境变量
vim ~/.bash_profile
加入:
export ORACLE_HOME=/usr/lib/oracle/18.3/client64 export LD_LIBRARY_PATH=$ORACLE_HOME/lib
然后执行
source ~/.bash_profile
使环境变量生效。
3.开始编译PHP的pdo_oci扩展, PHP源码包解压后
a>cd ~/src/php-7.2.8/ext/pdo_oci b>phpize c>./configure --with-php-config=/usr/local/php72/bin/php-config --with-pdo-oci=instantclient,/usr/lib/oracle/18.3/client64/lib d>make && make install
4. 编辑php.ini,加入pdo_oci.so扩展。
vim /usr/local/php72/etc/php.ini
插入
extension=pdo_oci
5.重启PHP-fpm,执行php -m可以看到pdo_oci扩展,完成。
-------------------------------------------------------------------
执行一段PHP代码看看:
<?php try { $conn = new PDO("oci:dbname=//127.0.0.1:1521/XE;charset=AL32UTF8", 'test', '111111'); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "select table_name from user_tables"; $res = $conn->query($sql); $data = $res->fetchAll(PDO::FETCH_ASSOC); print_r($data); $sql = "select * from test"; $res = $conn->query($sql); $data = $res->fetchAll(PDO::FETCH_ASSOC); print_r($data); } catch(PDOException $e) { echo "ODBC异常: ".$e->getMessage(); }
可以看到执行结果。
备注:使用Navicat建的表, 查询时表名和字段名都必须加上双引号,否则提示:
SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist。
自己用SQL建的表不加双引号就没这问题。
评论