今天想用PHP直接连接企业内部的oracle进行简单的查询,做一个接口,好让网络部的人员查看一些最新的信息,但是用php连接oracle的时候出现相关连接oracle的函数无法使用,我明明开打了php_oci8_11g的扩展了啊,会不会是因为我电脑是64位的,然后我用的是wamp,wamp会不会是32位的,于是自己先把原来的网站和数据库和配置什么的先备份到别的地方,然后把原来的wamp先卸载了,然后上官网把64位最新的wamp下载下来。

一路安装还算顺利。还是原来的页面,直接连接上去,这个时候没出现连接oracle相关的函数未定义,英文字符都出来了,不过中文的还是空白一片,我想这个大概是编码问题,查了相关的东西,说要先查看下数据库的编码,于是查询了下

select * from nls_database_parameters

出来的NLS_CHARACTERSET是ZHS16GBK。于是连接的代码如下

$conn = oci_connect(‘scott’, ‘密码’, “(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 本机IP)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))”,”ZHS16GBK”); // 建立连接

然后因为自己的编码是utf-8这中间还是需要进行转码的

header(“Content-type: text/html; charset=utf-8”);这个用于文件编码说明

$item=iconv(‘gb2312’, ‘utf-8’,$item);

用于gbk转为utf-8,然后刷新下页面,完美解决,没什么其它的问题。下面直接贴上自己的代码

<?php
header("Content-type: text/html; charset=utf-8");
$conn = oci_connect('scott', '密码', "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))","ZHS16GBK"); // 建立连接
if (!$conn) {
$e = oci_error();
print htmlentities($e&#91;'message'&#93;);
exit;
}
$query = 'SELECT * FROM emp'; // 查询语句
$stid = oci_parse($conn, $query); // 配置SQL语句,准备执行
if (!$stid) {
$e = oci_error($conn);
print htmlentities($e&#91;'message'&#93;);
exit;
}
$r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit
if(!$r) {
$e = oci_error($stid);
echo htmlentities($e&#91;'message'&#93;);
exit;
}
// 打印执行结果
print '<table border="1">';
while($row = oci_fetch_array($stid, OCI_RETURN_NULLS)) {
print '<tr>';
foreach($row as $item) {
	$item=iconv('gb2312', 'utf-8',$item);
print '<td>'.($item?htmlentities($item):' ').'</td>';
}
print '</tr>';
}
print '</table>';
oci_close($conn);
?>

分享该文章:

相关文章: