我使用PHP 5.3.3,因为我不控制服务器。我也使用CodeIgniter 3.1.0。我正在尝试使用CI连接到Oracle服务器,Oracle 11g发布11.2.0.4.0。
我可以使用php的oracle_connect:
$connect_string = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SID = MYSID)))";
$oconnect = oci_connect(USERNAME, PASSWORD, $connect_string );
$query = "select * from DB.TABLE";
$stid=oci_parse($oconnect, $query);
$r = oci_execute($stid);
while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC)) {
print_r($row);
}
但是当我尝试从CodeIgniter内设置db连接时,我得到一个错误,即TNS名称不知道,或者它无法连接,或者服务未知。这要看我怎么调整了
请注意,CodeIgniter上的示例可能是错误的。dsn使用SID=,其中示例使用SERVICE=;直到我阅读了php手册中的用户评论,他们才建议为php的oci_connect设置SID=这是我对CodeIgniter的设置:
$dsn_string = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SID = MYSID)))";
$db['default'] = array(
'dsn' => $dsn_string,
'hostname' => 'HOSTNAME',
'username' => 'USERNAME',
'password' => 'PASSWORD',
'database' => 'DB',
'dbdriver' => 'oci8',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
你知道会发生什么吗?我还会尝试一些其他的东西。我可以忽略CI的db连接,但由于我主要将其用作角前端的api提供者,因此db是我甚至使用CI的最大原因。
谢谢!
@Tpojka -我必须使用我给出的服务器,但事实证明这不是问题。
问题是。htaccess文件。我使用了一个现有的。htaccess,它有以下一行:
DirectoryIndex index.php
一开始我没怎么想,因为这是很正常的一行,但后来我意识到我已经修改了config.php,从url中删除了index.php。当我从。htaccess中删除这一行时,一切又开始工作了。
天哪。我不认为这会导致数据库错误,但这是消除最后一个错误的最终解决方案。