【发布时间】:2020-05-19 09:03:51
【问题描述】:
我正在努力将我的 Drupal (7.43) 应用程序(托管在 PHP 5.4 服务器上)连接到 Microsoft Azure SQL 数据库。
我真的很沮丧,甚至发现自己和我公司的 DBA 争论 why did you install this database on the newest version of SQL Server?。
编辑:
我之所以问这个问题是因为微软官方文档说如果 PHP 服务器版本低于 7,一个 不应该连接到较新版本的 SQL Servers。* .
Microsoft Drivers for PHP for SQL Server 的系统要求 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,那么这种php服务器的官方MS驱动是3.2版本。因此,如果 SQL Server 驱动程序是 3.2,则不应连接到高于 2014 版本的 SQL Server。
TL;博士;
我使用 FreeTDS 将 5.4 PHP 应用程序连接到 Azure SQL Server!耶
FreeTDS 是对最初由 Sybase 和 Microsoft SQL Server 销售的 C 库的重新实现。它允许许多开源应用程序,例如 Perl 和 PHP(或您自己的 C 或 C++ 程序)连接到 Sybase 或 Microsoft SQL Server。
我的操作系统是CentOS 7。
我为 http 服务器和 php 数据库连接安装了基本的 yum 包。
yum install httpd httpd-tools php php-common php-cli php-odbc php-pdo unixODBC unixODBC-devel
目前我了解:
- PDO 代表 PHP 数据对象。
- ODBC 代表 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 是不同的驱动程序 比微软的。
- PHP 不知道 FreeTDS 不知道 FreeTDS 关于 PHP 版本。
- 据我从答案中了解到,有 它们之间的 ODBC 桥/层。
- 更好地使用最新的 FreeTDS 版本以确保连接正常。
【问题讨论】:
-
支持什么和什么有效是两件不同的事情。 SSMS 17 不支持 SQL Server 2019,但这并不意味着它不会连接到它。使用不支持该软件的工具的问题意味着行为可能与您预期的不同。如果您确实有这些情况,那么推荐的建议是升级,因为更高版本将支持您所追求的功能。所以仅仅因为 3.2 不支持 Azure 并不意味着它不能与它一起工作。这可能只是意味着它不太可能或可能无法正常工作。
-
您是否有充分的理由仍在运行 went out of support several years go 的 PHP 版本?特别是如果升级可以帮助您解决这个问题。
-
@ADyson,是的,它是一个遗留应用程序,客户并没有真正投资于改进和开发时间。
-
“尽管微软官方文档说不应该”....实际上,他们并没有说您不能从 PHP 5.4 连接到 SQL Server。他们不能(或至少不支持)通过使用 Microsoft Drivers for PHP for SQL Server 来做到这一点。 FreeTDS 是一个不同的驱动程序。通过更换驱动程序,你已经更换了微软说你不应该使用的东西。 AFAIK Microsoft 没有参与 FreeTDS,所以他们支持什么完全取决于他们。
-
@AlexandreLage “客户并没有真正投资”。好的。我猜取决于他们。只要您定期以大红色闪烁的文字警告他们他们所承担的风险,并让他们签署一些文件,如果由于 PHP5.4 中的一个已知漏洞修补而发生某些事情,他们将承担所有法律责任以后的版本,是用来攻击自己的应用吗? (我想这可能不是你的职责,但希望有人这样做。)
标签: php sql-server odbc database-administration freetds