用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8467|回复: 4
收起左侧

如何使用CI访问Oracle数据库

[复制链接]
发表于 2009-10-20 13:48:23 | 显示全部楼层 |阅读模式
论坛中有朋友遇到同样的问题,做出了解答。再开一贴,希望大家能有更好的办法。
1、win2003下,apache + php 访问oracle

参考文档

http://database.ctocio.com.cn/tips/197/6463197.shtml

相关的库文件下载地址:

http://eduunix.ccut.edu.cn/index2/database/Oracle%20Instant%20Client/

http://eduunix.ccut.edu.cn/index2/database/Oracle%20Instant%20Client/instantclient-basic-win32-10.1.0.5-20060419.zip

2、实现CI访问Oracle

Active Record不能支持 Oracle,参考 《PHP敏捷开发框架》 “dbdriver: 你正在使用的数据库的类型 - CI可受的有选项有MySQL、MySQLi、 Postgre SQL、ODBC和MS SQL ”


因此采用链接串方式访问:

controllers中:

function index()
{
  $data['title'] = "My Blog Title";
  $data['heading'] = "My Blog Heading";
  $conn = OCILogon("username", "password", '//0.0.0.0:1521/xxxx');//最后的串表示oracle服务器的地址和端口号,斜线后面表示服务(库)名
  $query = "select user_id,user_date from table_name where user_id = 8 and user_name = 'Leonwang'";
  $stid = OCIParse($conn, $query);
  OCIExecute($stid);
  $i = 0;
  while ($row = oci_fetch_array ($stid, OCI_BOTH)) {//此处可以参考php帮助 oci_fetch_array
   $results[$i]['USER_ID'] = $row['USER_ID'];
   $results[$i][USER_DATE'] = $row[USER_DATE'];
   $i++;
  }
  echo $i. '<br>';//取出记录数
  $data['query'] = $results;
  $this->load->view('ebs_helper_view',$data);//调用view



}
----------------------------
view :
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<h1><?php echo $heading; ?></h1>

<?php
foreach($query as $row):
?>

<h3><?=$row['USER_ID']?><h3>
<p><?=$row['USER_DATE']?><p>

<hr>
<? endforeach; ?>
</body>
</html>

同时,目前的配置可以正常访问oracle,不过还不支持中文。也希望有高人指点。谢谢!

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

 楼主| 发表于 2009-10-20 14:06:15 | 显示全部楼层
关于中文正确显示,在网上找到了帮助,在 OCILogon 函数中添加参数: 'zhs16gbk',可以正常显示中文了。
$conn = OCILogon("username", "password", '//0.0.0.0:1521/xxxx','zhs16gbk');
发表于 2011-4-15 16:02:19 | 显示全部楼层
我试验不行啊?
发表于 2012-12-8 17:47:51 | 显示全部楼层
呵呵,要更改nls设置的
发表于 2014-8-15 16:59:17 | 显示全部楼层
这点太重要了,要注意的一个事情是:使用PHP开发Oracle应用时,不要使用Active Record模式。还有,不支持中文,可以在application\config\config.php中,连接数据库的地方,字符集不要使用utf-8,而应该使用oracle 的nls语言设置,就是使用:zh16kshs 这个设置,就应该可以支持中文了

本版积分规则