Форум программистов, компьютерный форум, киберфорум
PHP: Фреймворки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 6

MS SQL и Codeigniter. Ошибка при подключении

26.03.2014, 06:13. Показов 3139. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Я тут делаю одну штуку на codeigniter в связке с MS SQL. Как я подключаюсь:
1. application/config/database.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$active_group = 'default';
$active_record = TRUE;
 
$db['default']['hostname'] = 'ir***2012';
$db['default']['username'] = 'pl***n';
$db['default']['password'] = '1q***sx';
$db['default']['database'] = 'p***';
$db['default']['dbdriver'] = 'sqlsrv';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
2. system/database/drivers/sqlsrv/sqlsrv_driver.php
PHP
1
2
3
4
5
function db_pconnect()
{
    //$this->db_connect(TRUE);
    return $this->db_connect(TRUE);
}
Проблема. При попытке подключения вылетает исключение.
A PHP Error was encountered
Severity: Warning
Message: sqlsrv_query() expects parameter 1 to be resource, boolean given
Filename: sqlsrv/sqlsrv_driver.php
Line Number: 154
154 строка в файле sqlsrv_driver - это return в функции:
PHP
1
2
3
4
5
6
7
8
function _execute($sql)
{
    $sql = $this->_prep_query($sql);
    return sqlsrv_query($this->conn_id, $sql, null, array(
            'Scrollable' => SQLSRV_CURSOR_STATIC,
            'SendStreamParamsAtExec'=> true
            ));
}
Я проверил, какого из параметров не хватает, оказалось, что $this->conn_id возвращает NULL. Т.е. подключиться к базе не удается. А вот тут фокус, если в application/config/database.php оставить пустым $db['default']['database'], то коннектится все прекрасно, создается ссылка на подключение. Я, если честно, сломал себе уже голову.

Для проверки корректности установленных параметров подключения к БД я создал в корне сайта файлик test.php со следующим кодом:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
function FormatErrors( $errors )
{
echo "Error information: 
<br><br>";
 
foreach ( $errors as $error )
{
    echo "SQLSTATE: ".$error['SQLSTATE']."
    <br>";
    echo "Code: ".$error['code']."
    <br>";
    echo "Message: ".$error['message']."
    ";
    echo "<br><br>";
    echo $error['state'];
    }
}
 
 
//*******************************************************
//*********Connecting to server without database*********
//*******************************************************
echo '<h2>Connecting without selected database </h2>';
$serverName = "[То же, что и в параметрах Codeigniter]";
$connectionInfo = array( "Database"=>"",
                "UID"=>"То же, что и в параметрах Codeigniter" ,
                "PWD"=>"То же, что и в параметрах Codeigniter");
$conn = sqlsrv_connect( $serverName , $connectionInfo);
if( $conn === false ) {
    FormatErrors(sqlsrv_errors()); 
} else {
    echo 'Successful. Link to database: ';
    var_dump($conn);
}
 
//*******************************************************
//***********Connecting to server with database**********
//*******************************************************
 
echo '<h2>Connecting to database</h2>';
$serverName = "То же, что и в параметрах Codeigniter";
$connectionInfo = array( "Database"=>"То же, что и в параметрах Codeigniter​" ,
        'UID'=>'То же, что и в параметрах Codeigniter' ,
        'PWD'=>'То же, что и в параметрах Codeigniter',
        'ConnectionPooling' => 0,           //Эти три параметра 
        'CharacterSet'      => 'UTF-8',     //я взял из массива $connection 
        'ReturnDatesAsStrings' => 1         //файла sqlsrv_driver.php, стр. 61
);
$conn = sqlsrv_connect( $serverName , $connectionInfo);
if( $conn === false )
{
    FormatErrors(sqlsrv_errors()); 
} else {
    echo 'Successful. Link to database: ';
    var_dump($conn);
};
?>
Результат выполнения этого скрипта можете посмотреть здесь http://plan.iro38.ru/test.php

Можно увидеть, что ссылка на подключение создалась.

В чем проблема в codeigniter? Может, кто-нибудь сталкивался? Заранее спасибо.

Добавлено через 20 минут
Кстати говоря, вот ошибки, которые выдает sqlsrv_errors() перед 154 строкой файла sqlsrv_driver.php в Codeigniter:

Array (
[0] => Array (
[0] => 28000
[SQLSTATE] => 28000
[1] => 18456
[code] => 18456
[2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '****'.
[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '****'.
)
[1] => Array (
[0] => 42000
[SQLSTATE] => 42000
[1] => 4060
[code] => 4060
[2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot open database "****" requested by the login. The login failed.
[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot open database "****" requested by the login. The login failed.
)
)

Такие же ошибки были и в скрипте test.php. Но когда я изменил его кодировку с ANSI на UTF-8, все заработало. Я заметил, что файлы codeigniter все в UNIX ANSI. Попробовал переконвертировать все файлы ядра и файлы, используемые для работы с БД, в UTF-8 - не помогло.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2014, 06:13
Ответы с готовыми решениями:

Ошибка при работе с фреймворком CodeIgniter
Доброго времени суток форумчане. Первый раз пишу приложение используя фреймворк CI. Возникла ошибка, помогите пожалуйста. A PHP Error...

Ошибка при подключении
{ GLOBAL $link; query = &quot;INSERT INTO fio (name, sername, fname) value ('$name', '$sername', '$fname')&quot;; mysql_query($query,...

Не записываются данные в таблицу из codeigniter в sql
Всем привет,ребятки,вопрос жизни и смерти( Мне очень надо перегнать б/д MARC SQL в б/д сайта!!! Предыдущий программист делал это,он...

4
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 6
31.03.2014, 08:43  [ТС]
Неужели никто не сталкивался с такой проблемой?
0
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 2
04.05.2014, 23:36
У меня та же проблема с mysql. На localhost работает, а к удаленному серверу не подключается. Косяк где-то в codeigniter.
0
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 6
06.05.2014, 10:39  [ТС]
Причину нашел. Когда для пользователя по умолчанию уже установлена база, то при указании настроек подключения в codeigniter эту базу прописывать не нужно. Я установил значение
PHP
1
$db['default']['database'] = '';
Но по какой-то причине подключение все равно не проходило, поэтому настройки подключения я прописал прямо в sqlsrv_driver.php в функции
PHP
1
db_connect()
Пока не решу проблему, так и оставлю.
0
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 2
07.05.2014, 15:13
В моем случае (удаленное подключение к серверу mysql) причина, видимо, кроется в устаревшем движке БД, к которой обращаюсь. Она хранит хеши паролей в старом 16-ти битном формате. А мой клиент ожидает 41 бит. Из-за этого подключение не происходит. Теперь ищу хостера, у которого стоят нужные мне настройки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2014, 15:13
Помогаю со студенческими работами здесь

Ошибка при подключении библиотеки в Symfony
Доброго времени суток! У меня есть небольшой проект на Symfony, я решил добавить в него библиотеку Doctrine2 NestedSet для работы с...

Ошибка при подключении к MS SQL
Доброго времени суток, помогите пожалуйста в решении проблемы, пишу на C# для КПК. Пробую подключиться к базе данных, код: ...

Ошибка 40 при подключении к MS SQL
есть форма aspx и бд sql. необходимо подключение и поиск в бд по введенному слову в форме. ошибка40 protected void Button1_Click(object...

Ошибка при подключении к SQL
Не запускается прога с привязкой к БД. Вот текст. Подробная информация об использовании оперативной (JIT) отладки вместо...

Ошибка при подключении к SQL Server
День добрый при компиляции в VS кода вылетает первоначально данная ошибка так же она вылетает при попытках обратиться к БД и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru