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'], 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 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 应用程序”的错误没有了,但是会提示
代码是从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的代码里设置环境变量
终于php能够正确连接到oracle啦。
推荐阅读
-
windwos下使用php连接oracle数据库的过程分享
-
PHP没有数据库连接池怎么破?PHP环境下使用Nginx ngx_http_limit_req_module模块的高负载解决方案
-
windwos下使用php连接oracle数据库的过程分享_php实例
-
Erlang在Redhat 5.3下使用unixODBC连接Oracle数据库的配置
-
PHP没有数据库连接池怎么破?PHP环境下使用Nginx ngx_http_limit_req_module模块的高负载解决方案_PHP教程
-
PLSQL Developer 的安装与使用(连接Linux下的Oracle数据库)
-
php-[PHP] wamp环境下。使用PDO连接mysql,能执行查询的sql,不能调用存储过程
-
Erlang在Redhat 5.3下使用unixODBC连接Oracle数据库的配置
-
windwos下使用php连接oracle数据库的过程分享_PHP教程
-
Linux下PHP使用sqlSrv连接微软数据库的方法