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 相关文章推荐
用php和MySql来与ODBC数据连接
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Nov 25 PHP
php获取网页内容方法总结
Dec 04 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
PHP常用的小程序代码段
Nov 14 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
PHP实现微信退款功能
Oct 02 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
Flask数据库迁移简单介绍
2017/10/24 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
Python中作用域的深入讲解
2018/12/10 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python文件路径名的操作方法
2019/10/30 Python
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
工程预算与管理应届生求职信
2013/10/06 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
生物制药专业求职信
2014/03/11 职场文书
班干部演讲稿
2014/04/24 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
增员口号大全
2014/06/18 职场文书
体育节口号
2014/06/19 职场文书
商场租赁意向书
2014/07/30 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
刑事撤诉申请书
2015/05/18 职场文书