Следует ли использовать драйвер FreeTDS вместо MS SQL Driver для совместимости между старыми PHP и более новыми SQL серверами? - PullRequest
0 голосов
/ 03 февраля 2020

Я изо всех сил пытался подключить свое приложение 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 года.

Relation between php server and ms sql driver compatibility

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, чтобы убедиться, что соединение работает.

1 Ответ

3 голосов
/ 06 февраля 2020

Вы сказали

Причина, по которой я спросил об этом, была из-за официальной документации Microsoft, в которой говорится, что я не могу подключиться к более новым версиям SQL Server, если моя PHP версия ниже 7. * .

и

Действительно ли это соединение php 5.4 действительно должно работать с новейшим SQL сервером, несмотря на то, что официальные документы Microsoft говорят, что это не должно?

... но на самом деле в документации Microsoft, о которой вы говорите , не говорится, что вы не можете подключиться к SQL серверу с PHP 5.4.

Они сказали, что вы не можете (или, по крайней мере, не поддерживаете) сделать это с помощью , используя драйверы Microsoft для PHP для SQL Сервер - что является указанием c продукт, о котором идет речь в документации.

FreeTDS - это другой драйвер. Заменив драйвер, вы заменили то, что Microsoft не рекомендует использовать. AFAIK Microsoft не имеет никакого отношения к FreeTDS, поэтому то, что они поддерживают, и то, с чем работает их драйвер, полностью зависит от них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...