windwos下使用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'],E_USER_ERROR);
}

// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message'],E_USER_ERROR);
}

// Fetch the results of the query
print "

\n";
while ($row = oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)) {
print " foreach ($row as $item) {
print " }
print "
}
print "

oci_free_statement($stid);
oci_close($conn);

?>

说明:
oci_connect('hr','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连接串是:
代码如下:

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

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

代码如下:

查出来的结果是SIMPLIFIED CHInesE_CHINA.ZHS16GBK,在PHP代码里设置环境变量
代码如下:
nesE_CHINA.ZHS16GBK");

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...