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 相关文章推荐
mysql总结之explain
Feb 27 PHP
php汉字转拼音的示例
Feb 27 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
php文件压缩之PHPZip类用法实例
Jun 18 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php 进度条实现代码
2009/03/10 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python 显示数组全部元素的方法
2018/04/19 Python
一看就懂得Python的math模块
2018/10/21 Python
详解Python装饰器
2019/03/25 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
python实现磁盘日志清理的示例
2020/11/05 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
店长岗位的工作内容
2013/11/12 职场文书
简历中求职的个人自我评价
2013/12/03 职场文书
工艺员岗位职责
2014/02/11 职场文书
爱护公物演讲稿
2014/09/09 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers