Справка по базе данных Codeigniter? PHP connect работает

#php #database #oracle #codeigniter

#php #База данных #Oracle #codeigniter

Вопрос:

Я использую 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, я получаю сообщение об ошибке, что имя TNS неизвестно, или что он не может подключиться, или что служба неизвестна. Зависит от того, как я это настрою.

Обратите внимание, что примеры на CodeIgniter могут быть неправильными. DSN использует SID= там, где в примерах есть SERVICE = ; только когда я прочитал комментарии пользователей в руководстве по php, они предложили SID= для php 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 для интерфейса angular, db является основной причиной, по которой я вообще использую CI.

Спасибо!

Комментарии:

1. Может быть, отсутствие требований ?

2. Возможно, попробуйте использовать синтаксис EZCONNECT : $dsn = 'hostname/mysid';

Ответ №1:

@Tpojka — Я должен использовать предоставленный мне сервер, но, оказывается, проблема была не в этом.

Проблема заключалась в файле .htaccess. Я использовал существующий .htaccess, и в нем была следующая строка:

 DirectoryIndex index.php
  

Сначала я ничего об этом не подумал, так как это довольно обычная строка, но потом я понял, что изменил свой config.php чтобы удалить index.php из URL. Как только я удалил эту строку из .htaccess, все снова заработало.

Блин. Я не думал, что это может привести к ошибкам базы данных, но это было окончательное решение, позволяющее избавиться от последней ошибки.