Я изо всех сил пытался подключить свое приложение Drupal (7.43) (размещенное на сервере PHP 5.4) к базе данных Microsoft Azure SQL.
Я впал в депрессию и даже обнаружил, что спорю с DBA моей компании за why did you install this database on the newest version of SQL Server?
.
Отредактировано:
Причина, по которой я спросил об этом, связана с официальной документацией Microsoft, в которой говорится, что один не должен подключаться к более новым версиям SQL Серверы если PHP версия сервера ниже 7. *.
Системные требования для драйверов Microsoft для PHP для SQL Сервер https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-ver15#driver -versions
Согласно этой статье, если версия сервера PHP равна 5.4, официальным драйвером MS для такого сервера php является версия 3.2. Поэтому, если драйвер SQL Server равен 3.2, он не должен подключаться к SQL версии сервера выше 2014 года.
TL; DR;
Я использовал FreeTDS для подключения приложения 5.4 PHP к Azure SQL Серверу ! Yaay
FreeTDS - это повторная реализация C библиотек, изначально продаваемых Sybase и Microsoft SQL Server. Он позволяет многим приложениям с открытым исходным кодом, таким как Perl и PHP (или вашей собственной программе C или C ++), подключаться к Sybase или серверу Microsoft SQL.
Моя операционная система CentOS 7 .
Я установил пакеты basi c yum для http-сервера и php подключения к базе данных.
yum install httpd httpd-tools php php-common php-cli php-odbc php-pdo unixODBC unixODBC-devel
Насколько я понимаю:
- PDO обозначает PHP Объекты данных .
- ODB C обозначает Open Database Connectivity - что является стандартным прикладным программированием интерфейс для доступа к системам управления базами данных.
Хорошо, тогда я установил FreeTDS:
yum install epel-release
yum check-update
yum install freetds freetds-devel
Тогда у меня было /etc/freetds.conf
:
[MYCLIENT]
host = myclient.database.edtech.com
port = 6669
tds version = 8.0 # Btw, how important is this version for old PHP servers versus new SQL servers?
Я также имел /etc/odbcinst.ini
[FreeTDS]
Driver = /lib64/libtdsodbc.so.0
FileUsage = 1
Кроме того, у меня было /etc/odbc.ini
:
[MSSQLServer]
Driver = FreeTDS # Yes, ODBC will use FreeTDS, I get it.
Description = MSSQL Server
Trace = Yes
Server = myclient.database.edtech.com
Port = 6669
TDS_Version = 7.1 # Shouldn't this be same as the version in /etc/freetds.conf?
Database = ApplicationDB
Выводы
- Надеюсь, этот вопрос поможет другим.
- FreeTDS - это драйвер, отличный от драйвера Microsoft.
- PHP не знает о FreeTDS, а не FreeTDS знает о PHP версии.
- Насколько я понял из ответов, между ними есть мост / слой ODB C.
- Лучше использовать новейшую версию FreeTDS, чтобы убедиться, что соединение работает.