windwos下使用php连接oracle数据库的过程分享


Posted in PHP onMay 26, 2014

要使用php连接oracle,基本条件是
1.需要你安装了php、
2.安装了oracle、
3.配置了tnsname.ora。
本地命令行使用sqlplus能够连接到oracle。

根据你机器的版本选对64bit或者32bit的php程序,我们使用php的oci8扩展连接oracle

安装好php后,打开oci8扩展,

写一段连接oracle的ora.php代码

<?php
$conn = oci_connect('hr', 'welcome', 'MYDB');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Prepare the statement
$stid = oci_parse($conn, 'SELECT * FROM departments');
if (!$stid) {
    $e = oci_error($conn);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
    $e = oci_error($stid);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Fetch the results of the query
print "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    print "<tr>\n";
    foreach ($row as $item) {
        print "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
    }
    print "</tr>\n";
}
print "</table>\n";
oci_free_statement($stid);
oci_close($conn);
?>

说明:
oci_connect('hr', 'welcome', 'MYDB')
第一个参数是oracle的用户名,
第二个参数是oracle的密码
第三个参数是tnsnames.ora里的连接串名

命令行下执行

php ora.php

提示如下错误

PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\php_oci8.dll'- %1 不是有效的 Win32 应用程序。 in Unknown on line 0
PHP Parse error: syntax error, unexpected '"user"' (T_CONSTANT_ENCAPSED_STRING) in C:\Users\nginx\Desktop\oraclephpoci\oci.php on line 3

开始以为是没有选对版本,我是64位的机器,结果说是win32的程序,一看字面提示,我就重新安装了新的32bit程序还是报错。

仔细查了查发现在32位像64位迁移的问题,出现如下问题时,我们需要安装Oracle Instant Client。

Unable to load dynamic library 'C:\Program Files (x86)\PHP\ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.
Warning oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries

Oracle Instant Client,它是一个解压后就能使用的程序,不需要安装。
如果有oracle账号的可以去oracle下载对应的版本,(注册用户需要一堆信息)

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

嫌麻烦的同学使用这个地址下载

http://eduunix.ccut.edu.cn/index2/database/Oracle%20Instant%20Client/

下载后把压缩包解压到c:\oracleinstantclient,并添加路径到环境变量PATH

重新执行php ora.php,“%1 不是有效的 Win32 应用程序”的错误没有了,但是会提示

syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

代码是从php官网直接拷过来的,代码中有不可见的字符,使用notepad++查看所有字符,去掉乱码即可。

继续执行,这次提示,

PHP Fatal error: ORA-12154: TNS:could not resolve the connect identifier specified in C:\Users\nginx\Desktop\airline\oci.php on line 6

看样子是php没有找到tnsnames.ora的位置,时间比较赶,那我就直接使用ip的形式,具体格式根据你的信息拼写oci_connect的第三个参数
oracle10格式:[//]host_name[:port][/service_name]
oracle11格式:[//]host_name[:port][/service_name][:server_type][/instance_name].
我具体使用的php oci连接串是:
$conn = oci_connect('hr', 'welcome', '//3water.com:1523/sycx');

配好上述信息后,终于能出结果了,但是发现查出来的结果中问乱码,这种问题基本都是编码不匹配。

php oci8中文乱码解决办法,先查询你的oracle的数据库编码使用,

select userenv('language') from dual;

查出来的结果是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,在php的代码里设置环境变量
putenv("NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK");

终于php能够正确连接到oracle啦。

PHP 相关文章推荐
apache+php+mysql安装配置方法小结
Aug 01 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
php中文验证码实现方法
Jun 18 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 #PHP
php5.2以下版本无json_decode函数的解决方法
May 25 #PHP
模板引擎smarty工作原理以及使用示例
May 25 #PHP
浅析php中json_encode()和json_decode()
May 25 #PHP
浅析PHP微信支付通知的处理方式
May 25 #PHP
PHP开发微信支付的代码分享
May 25 #PHP
php定时计划任务与fsockopen持续进程实例
May 23 #PHP
You might like
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Python open读写文件实现脚本
2008/09/06 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python实现简单多线程任务队列
2016/02/27 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python构建深度神经网络(续)
2018/03/10 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
结构工程研究生求职信
2013/10/13 职场文书
广播节目策划方案
2014/05/23 职场文书
同意迁入证明模板
2014/10/26 职场文书
先进员工事迹材料
2014/12/20 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
创业计划书之餐饮
2019/09/02 职场文书