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

要使用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啦。

时间: 2024-09-15 23:49:07

windwos下使用php连接oracle数据库的过程分享_php实例的相关文章

php连接oracle数据库的核心步骤_php技巧

本文实例讲述了php连接oracle数据库的核心步骤.分享给大家供大家参考,具体如下: 1.修改php.ini文件,打开extension=php_oci8.dll扩展. 2.拷贝php安装目录/ext/php_oci8.dll文件到system32目录下. 3.测试代码: $conn = oci_connect("scott", "tiger", $db); if (!$conn) { $e = oci_error(); print htmlentities($e

php实现mysql数据库操作类分享_php实例

复制代码 代码如下: <?php/*数据库操作类*/class Mysql{ private $LocalHost = 'localhost'; private $LoaclUser = 'root'; private $LocalPass = '123456'; private $LocalBase = 'jiangxibaiyi'; private $LocalCode = 'UTF8'; private $PreFix; private $Conn; private $Start    

PHP实现的MongoDB数据库操作类分享_php实例

class HMongodb { private $mongo; //Mongodb连接 private $curr_db_name; private $curr_table_name; private $error; public function getInstance($mongo_server, $flag=array()) { static $mongodb_arr; if (empty($flag['tag'])) { $flag['tag'] = 'default'; } if (

Linux下手动编译安装PHP扩展的例子分享_php实例

开发和部署的过程中可能会经常出现需要额外安装PHP扩展的情况,下边以PDO_MYSQL为例,介绍下手动编译安装PHP扩展: 先到http://pecl.php.net/找需要的版本,我用的是稳定的版本.要先看看说明,特别是要注意mysql的php的版本. 复制代码 代码如下: wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz tar xzvf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2 /usr/local/php

PHP zip扩展Linux下安装过程分享_php实例

1.依次运行以下命令 复制代码 代码如下: wget http://pecl.php.net/get/zip-1.8.10.tgz#tar zxvf zip-1.8.3.tgz#cd zip-1.8.3#/opt/php/bin/phpize   (对应的phpize路径)http://yige.org/#./configure --with-php-config=/opt/php/bin/php-config (对应的php-config路径)#make#make install 2.生成的模

C#利用ODP.net连接Oracle数据库的操作方法_oracle

本文介绍了C#连接Oracle数据库的过程.通过instant client和ODP.net中的Oracle.DataAccess.dll,我们就可以方便的部署.net应用程序或者站点,而不需要安装Oracle客户端.接下来我们就介绍这一过程. 1. ODAC的安装 在oracle的官方网站上下载与你安装的oracle对应版本的ODAC. 下载地址:ODAC Download 下载好后解压安装,安装时不用安装全部的组件.主要安装以下组件: Oracle Instant Client Oracle

JDBC连接Oracle数据库常见问题及解决方法

oracle|解决|数据|数据库|问题 Jbuilder正确连接 oracle 9i需要注意的几个问题 oracle8以上的应该都使用classes12.jar文件作为jdbc驱动: 正确设置windows的classpath和jbuilder中的enterprise setup .configure libraries,将casses12.jar路径正确添加到上述需要设置的地方: 进入database pilot,在database pilot中,file---new 在driver列表中如果

Perl连接Oracle数据库

上次讲了在linux下安装Oracle,安装完之后可以用netac来配置远程数据库的本地命名. 要在perl下面连接oracle数据库,首先必须安装DBI和DBD for Oracle. 下面是一段perl程序 #!/usr/bin/perl use DBI; $dbname="oralce"; $user="user"; $passwd="password"; $dbh=""; $dbh = DBI->connect(

.net程序远程连接Oracle数据库

.net 远程连接Oracle数据库看起来挺简单的,但实际做起来还是遇到不少问题.把我今天折腾这个 东西的经验给大家共享吧. 访问 oracle 数据库的方式很多,我用的是 OleDbConnection,这个没什么好说的,代码如下: 1. 连接代码 _OleDbConnection = new OleDbConnection(connectionString); _OleDbConnection.Open(); 2.连接字符串 远程连接的连接字符串可以这样写 provider=MSDAORA;