环境:XP系统+apache2.2+php5.3(5.2)+oracle10g(9i,两个库都有)+oracle client 10g
问题解决过程:
好几天的纠结。。。
因项目要求,更换cakePHP数据库连接至oracle,查询一个数据库表,页面完全不载入,
使用cakephp的原始程序(下载后的原始包),首页测试是否能连接上数据库,连接不成
跟踪debug代码,ConnectionManager ->getDataSource->loadDataSource 再定位到dbo_oracle 中的connect方法,发现该方法出错,判定是php连接oracle有问题
搜索php oracle连接,找到oracle官网的faq说明和technical note: http://www.oracle.com/technology/pub/notes/technote_php_instant.html。需要oracle本地客户端,加上php的extension模块
ext目录增加php_oci8.dll,php.ini增加php的oci8 extension:
[PHP_OCI8]
extension=php_oci8.dll
重启apache启动不了,出现entry point OCIPing missing in OCI.DLL 无法定位程序输入点OCIPing于动态链接库的错误
试了半天,修改未果,本地是php5.3.2版本,下载php5.2.14安装,在安装时设置了oracle extension,连接数据库成功。
ok,成功的第一步。总结以为是php安装时没有按照步骤来引起的。
第二天发现查询oracle数据库结果为乱码,又发现查询mysql本来毫无问题,也变成乱码。
想想又把php5.3版本装上,并且尝试了php5.3.3这个稳定版,mysql乱码消除,oracle数据库重新连不上,安装时设置了oracle extension模块也未果。
google未果,问王征大神说php5.2貌似不支持Unicode,于是改用5.3版本,继续研究为何连接不上数据库。
定位到oci.dll,参照网络上资料复制了oracle客户端的oci.dll文件到c:\windows\system32一份,重启依然内存错误,输入点错误。
修改重试多次,apache重装,php5.3.2 php5.3.3 php5.2三个版本切换尝试,最终回忆起oracle网站的文档说明,
instantclient-basic-win32-10.2.0.3-20061115\instantclient_10_2 文件目录中的oci版本跟本地oracle客户端版本并不一致,
复制目录中的oci.dll版本10.2.0.1覆盖本地客户端的E:\Oracle\product\10.1.0\Client_1\BIN 10.1.0.2
plsql仍然可用,使用php5.3重启apache终于不报错,可以连接上oracle服务器
mysql数据库结果没有乱码,但是oracle数据库仍然是乱码,跟踪发现,虽然oracle数据库编码为utf8
但读出的结果却变为gbk编码 使用函数mb_convert_encoding($appl['Appl']['soft_name'], "UTF-8", "GBK")
才能读出正确值,在database.php中配置 'encoding'=>"GBK" 无效,配置为utf8也无效,查询条件也要从utf8转码为gbk后才能查询出正确结果。有待进一步研究。
ok,这已算成功的第二步。总结认为php的版本真有问题。
第三天思索乱码原因,可能为本机编码原因,也可能是php编码配置,最终发现是oracle client编码设置问题,
参考文章http://junmail.iteye.com/blog/137996。进入注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\设置
更改NLS_LANG值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK =》 american_america.AL32UTF8
终于不用转换gbk了!成功的最后一步! 但依然发现问题,oracle client的sql查询结果变为乱码,估计是比较难找到两全方法了
2010-8-18日,测试php函数连接oracle和cakePHP连接oracle,终于从对比中发现,database的charset是关键,设置为charset=utf8终于成功,也无需依赖NLS_LANG变量
oracle client,PHP 版本Unicode支持差异和dll文件差异以及oracle client编码多重问题导致此次action困难重重。
总结php之oracle连接步骤:
1必须是php5.3版本,安装时选定oracle extension。5.2对Unicode支持有问题,mysql和oracle均为乱码(也可能修改两者字符集后可用,方便起见还是5.3吧)
2oracle client bin目录下的dll版本必须正确,10.2.0.1版本才可用,10.1.0.2版本的dll估计没有OCIPing入口?本地没有oracle client的话,可以安装官方给的instantclient_10_2 ,将路径加入path环境变量中(没有试验过,按oracle note说明应该是可用)。
3NLS_LANG值更改,避免乱码: 进入注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\设置
更改NLS_LANG值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK =》 american_america.AL32UTF8
或直接在database.php里配置charset=utf8
oracle api
XCVIII. Oracle 8 函数库 "ora_"开头的 函数为现在最新版本函数
cakephp配置为:
var $defaultd = array(
'driver' => 'oracle',
'persistent' => false,
'host' => '124.205.46.166',
'login' => 'netqin',
'password' => 'netqin#))*',
'database' => 'jtuser1_124.205.46.166',
'prefix' => '',
'encoding'=>"gbk",
);
不依赖本地onsnames.ora和nls_lang的配置版本:
var $default = array(
'driver' => 'oracle',
'persistent' => false,
'host' => '124.205.46.166', // 192.168.3.232
'login' => 'netqin',
'password' => 'netqin#))*',
'database' => '//124.205.46.166:1521/jtuser1',
'prefix' => '',
'charset'=>"UTF8",
);
database名称为 Oracle\product\10.1.0\Client_1\NETWORK\ADMIN\tnsnames.ora 配置的tnsname
连接及数据获取小例子:
$c1 = oci_connect("baike", "baike", "baike");
// $c2= oci_connect("netqin", "netqin#))*", "jtuser1_124.205.46.166");
if($c2) echo "connected success!";
$stmt = oci_parse($c1, "select * from tbl_aq_software_i t where soft_id = 33");
oci_execute($stmt, OCI_DEFAULT);
echo $c1."----selecting\n\n";
while (oci_fetch($stmt))
Unknown macro: { echo $conn . " [" . oci_result($stmt, "SOFT_ID") . "]nn"; }
echo $conn . "----done\n\n";
其中oci_result 的第二个参数须是数据表中字段的大写形式
在cakePHP中 字段名称则必须是小写,否则出现Undefined index错误
$appFile['AppFile']['REIT_VERSION'] =>$appFile['AppFile']['reit_version']
Labels parameters
标签
添加标签
分享到:
相关推荐
<th>创建时间</th> </tr> <!-- 使用foreach遍历$articles,打印文章信息 --> <?php foreach ($articles as $article): ?> <tr> <td><?= $this->Html->link($article->title, ['action' => 'view', $article->...
</p><p>主要特性:</p><p>基于MVC架构</p><p>视图支持Ajax</p><p>内置校验框架</p><p>提供应用程序的基础模块和CRUD 代码自动生成功能</p><p>提供处理session,request,security的组件</p><p>灵活的视图缓存功能</p>...
<th>Created</th> </tr> <?php foreach ($this->post->find_all() as $post): ?> <tr> <td><?=$post['id']?></td> <td><?=$this->link_for($post['title'], "/posts/view/{$post['id']}")?></td> <td><?=$...
- 修改 `httpd.conf` 文件中的 `DocumentRoot` 和 `<Directory>` 设置。 ```conf DocumentRoot "E:/htdocs/app/webroot" <Directory "E:/htdocs/app/webroot"> ``` 2. **启用 URL 重写** - 在 `httpd.conf` ...
要有效学习HTML,首先要理解其基本元素,如标题(`<h1>`到`<h6>`)、段落(`<p>`)、图像(`<img>`)、链接(`<a>`)等。了解每个标签的作用和使用场景,以及如何通过类(class)和ID选择器来增加自定义样式。 CSS...
理解基本的HTML标签,如段落(`<p>`)、标题(`<h1>`到`<h6>`)、图像(`<img>`)、链接(`<a>`)等至关重要。随着HTML5的普及,学习新的元素和属性,如音频和视频支持,离线存储,以及新的表单控件,也是必要的。 ...
它引入了新的元素如`<header>`、`<nav>`、`<section>`、`<article>`和`<footer>`,增强了语义化。同时,HTML5支持离线存储(AppCache)、拖放功能、媒体元素(音频、视频)以及 canvas 和 svg 等图形绘制功能。 2. ...
CakePHP <3> = 3.3.0 CakePHP> = 3.5.0 扳手1.X 扳手2.X 扳手3.X PHP> = 5.4.16 PHP> = 5.5.9 PHP> = 5.6.0 使用CakePHP DispatcherFilter机制 使用CakePHP中间件堆栈和PSR-7请求/响应实现 使用CakePHP...
打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...
打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...
plus - 在 CakePHP 中添加和删除表 安装 在默认模板中链接 js 文件 蛋糕PHP <?= $this->Html->script("jquery.plus");?> html [removed][removed] 用法 <table> <thead> </thead> <tbody> </tbody> ...
'</font><br>'; } } } else { echo "没有错误。"; } echo $this->Form->create("Logins", array('url' => '/validation')); echo $this->Form->input('username'); echo $this->Form->input('password'); echo ...
There are two main ways to get a fresh copy of CakePHP. You can either download an archive copy (zip/tar.gz/tar.bz2) from the main website, or check out the code from the git repository. To download ...
### CakePHP 3.4 开发手册文档概览 #### CakePHP 一瞥 CakePHP 是一款基于 PHP 的快速开发框架,它强调采用约定优于配置(Convention Over Configuration, CoC)的原则来简化开发过程,使得开发者能够快速构建稳定...
### CakePHP框架书籍知识点概述 #### 一、Getting Started(开始使用) - **博客教程**:本书籍通过一个博客项目的示例,引导读者逐步了解CakePHP框架的基本用法。这包括了如何设置环境、创建模型(Model)、控制器...
例如,通过 `$this->Article->find()` 方法可以轻松获取文章数据。此外,它支持CRUD(创建、读取、更新、删除)操作,简化了数据库的增删改查。 **组件(Components)与助手(Helpers)** 组件类似于可重用的代码块...
<script src="/js/tinymce.min.js"></script> <script> tinymce.init({ selector: 'textarea', // 选择要转化为编辑器的textarea元素 plugins: 'image code', // 激活所需插件,这里我们选择了图像和代码插件 ...
《CakePHP 1.2 手册》是针对该版本框架的重要参考资料,旨在帮助开发者深入理解和有效使用 CakePHP 进行Web开发。 CakePHP 是一个基于Model-View-Controller(MVC)架构模式的开源PHP框架,它简化了Web应用程序的...
### CakePHP分页详解 #### 一、简介 在现代Web开发中,高效地管理和展示大量数据是一项重要的挑战。为了确保用户体验良好并且服务器资源得到合理利用,开发者们常常需要实现分页功能。对于使用CakePHP框架的应用...