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获取类中常量,属性,及方法列表的方法
Apr 09 PHP
PHP高级OOP技术演示
Aug 27 PHP
php批量上传的实现代码
Jun 09 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
PHP return语句的另一个作用
Jul 30 PHP
php查询操作实现投票功能
May 09 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
php实现微信企业付款到个人零钱功能
Oct 09 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
在PHP中操作Excel实例代码
2010/04/29 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
php读取csc文件并输出
2015/05/21 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
24式加速你的Python(小结)
2019/06/13 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
行政总经理岗位职责
2013/12/05 职场文书
2014新年寄语
2014/01/20 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
学校2014年度工作总结
2014/12/06 职场文书
学校中秋节活动总结
2015/03/23 职场文书
领导离职感言
2015/08/03 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python