导语:这篇文章与wordpress无关,内容为php的codelgniter(CI)框架连接ORACLE数据库时的database.php配置。叶子有一个项目需要用CI框架和ORACLE数据库,相当的不适应,开始的时候数据库老是连接不上,后来查找发现是字符集的问题。
找出ORACLE使用的字符集
使用下面的sql语句
select * from nls_database_parameters
结果有很多,其中一个是:NLS_CHARACTERSET ZHS16GBK。这个ZHS16GBK就是oracle的字符集。
配置database.php
database.php在application/config目录下。
$tnsname = '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 134.166.1.1)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = leaf)))'; $db['default'] = array( 'dsn' => '', 'hostname' => $tnsname, 'username' => 'leaf', 'password' => 'leaf', 'database' => '', 'dbdriver' => 'oci8', 'dbprefix' => '', 'pconnect' => TRUE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'zhs16gbk', 'dbcollat' => '', 'swap_pre' => '', 'autoinit' => TRUE, 'stricton' => FALSE );
配置好就可以了。
如果字符集不一样,数据库服务器是zhs16gbk,web服务器是utf-8,那么会提示字符集有错误的。
注意
CI框架在php7的环境下,使用$this->db->set()和$this->db->insert()等进行ORACLE数据库操作的时候,会提示数据表不存在,原因是表名在转换中加了双引号,导致oracle认不出来。
解决的方法就是直接写sql语句来执行。
例如:
$this->db->set('login', $userlogin); $this->db->insert("users");
以上代码oracle会提示表不存在。以下代码会成功执行。
$sql = "insert into users (login) values ('leaf')"; $this->db->query($sql,false);
结束
你学会了吗?