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

2015-01-24信息快讯网

这篇文章主要介绍了windwos下使用php连接oracle数据库的过程分享,讲解了php连接oracle的必要条件、代码实例以及错误排查等,需要的朋友可以参考下

要使用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', '//www.jb51.net:1523/sycx');

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

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

select userenv('language') from dual;

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

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

thinkphp实现like模糊查询实例
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Smarty中调用FCKeditor的方法
CI框架学习笔记(二) -入口文件index.php
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Linux下PHP加速器APC的安装与配置笔记
自己写的兼容低于PHP 5.5版本的array_column()函数
使用PHPMailer实现邮件发送代码分享
ThinkPHP整合百度Ueditor图文教程
PHP 抽象方法与抽象类abstract关键字介绍及应用
跟我学Laravel之视图 & Response
跟我学Laravel之请求与输入
跟我学Laravel之路由
Linux下安装oracle客户端并配置php5.3
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
PHP中file_get_contents高用法实例
将二维数组转为一维数组的2种方法
查找php配置文件php.ini所在路径的二种方法
PHP解析html类库simple_html_dom的转码bug
PhpDocumentor 2安装以及生成API文档的方法
PHP小技巧之JS和CSS优化工具Minify的使用方法
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
ThinkPHP使用心得分享-上传类UploadFile的使用
ThinkPHP使用心得分享-分页类Page的用法
php中curl和file_get_content的区别
php中curl、fsocket、file_get_content三个函数的使用比较
PHP中把stdClass Object转array的几个方法
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
codeigniter框架The URI you submitted has disallowed characters错误解决方法
php 解压rar文件及zip文件的方法
php加速器eAccelerator的配置参数、API详解
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
©2014-2024 dbsqp.com