Подключение к базе данных MS SQL с PHP: имя источника данных не найдено и драйвер по умолчанию не указан

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

все настроено следующим образом (значения между "" правильно в файле):

/ etc / odbc.ini:

[CRMCONNECT]
Description = "CRMConnect"
Driver = FreeTDS
Trace = No
Servername = CRMSERVER
Database = "dbname"
UserName = "username"
Password = "password"

[Default]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

/ etc / odbcinst.ini:

[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout       = 5
CPReuse         = 5
FileUsage       = 1

/ etc/freetds / freetds.conf:

[CRMSERVER]
host = xxx.xxx.xxx.xxx 
port = 1433
tds version = 8.0

Я дважды проверил хост много раз и это правильно. Я также попробовал TDS версии 7.0, но не повезло.

Я могу успешно подключиться к серверу с помощью isql:

root@crmart-web004:/# isql -v CRMCONNECT "user" "pass"
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

но с PHP я просто не могу заставить его работать, я получаю следующую ошибку:

[unixODBC][Driver Manager]Data source name not found, and no default driver specified 

моя строка подключения:

$connection = odbc_connect("Driver={CRMCONNECT};Server=xxx.xxx.xxx.xxx;Database=dbname;","username","password");

все параметры проверяются дважды и являются правильными.

как я могу успешно подключиться к isql, но он терпит неудачу в php?

моя версия php:

PHP Version 5.4.4-14+deb7u5

настройки odbcinst:

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

надеюсь, у кого-то есть идея, что может быть неправильно.

спасибо заранее

в отношении

обновление:

Я изменил строку подключения на:

$connection = odbc_connect("CRMCONNECT;Database=dbname;","user","pass");

что приводит к другой ошибке:

[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed

Я буду смотреть на это, спасибо еще раз vinodadhikary

С уважением.

обновление 2:

моя строка подключения была неправильной, это должно было быть:

$connection = odbc_connect("CRMCONNECT","user","pass");

спасибо vinodadhikary!

С уважением и счастливых праздников.

3 ответов


С CRMCONNECT DSN определено, вы можете использовать следующий метод подключения:

$connection = odbc_connect("CRMCONNECT","username","password");

и в строке подключения у вас есть Driver={CRMCONNECT};. CRMCONNECT Как вы определили, это не драйвер, это имя источника данных. Водитель в вашем случае будет FreeTDS


у меня была такая же ошибка в Laravel 5.5 с PHP 7.1.9 на Debian 7.11. Исправлено, удалив фигурные скобки из имени драйвера в DSN:

ошибка: "odbc:Driver={fail};Server=host;Database=db;"

работает: "odbc:Driver=success;Server=host;Database=db;"

другой рабочей опцией было перемещение конфигурации источника данных из этой строки в odbc.ini, а затем ссылаясь на него:"odbc:odbc_ini_data_source_name"

самое смешное, что тот же источник данных с Driver={SQL Server} (с фигурными скобками) работал правильно под Windows 10.


то же самое относится к PDO. $conn = new PDO("odbc:CRMCONNECT"); и обязательно установите драйвер по умолчанию в odbc.ini

[Default] Driver = IBM i Access ODBC Driver 64-bit в нашем случае