我使用的是PHP 5.3.3,因为我无法控制服务器。我也使用CodeIgniter 3.1.0。我尝试使用CI连接到Oracle服务器,Oracle 11g版本11.2.0.4.0。
我可以使用php&#o; 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中设置数据库连接时,我收到一个错误,即TNS名称未知,或者它无法连接,或者服务未知。取决于我如何调整它。
请注意CodeIgniter上的示例可能有误。 dsn使用SID =其中示例具有SERVICE =;直到我在php手册中读到用户评论,他们才建议SID = for php' s oci_connect。
这是我对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的数据库连接,但由于我主要使用它作为角度前端的api提供者,因此db是我甚至使用CI的最大原因。
谢谢!
答案 0 :(得分:0)
@Tpojka - 我必须使用我给的服务器,但结果证明这不是问题。
问题是.htaccess文件。我使用了现有的.htaccess,它有以下几行:
DirectoryIndex index.php
我一开始并没有想到任何事情,因为这是一个非常正常的路线,但后来我意识到我已经改变了我的config.php以从网址中删除index.php。一旦我从.htaccess中删除了那一行,一切都重新开始了。
啧。我认为这不会导致数据库错误,但这是摆脱最后错误的最终解决方案。