【问题标题】:Should one use FreeTDS driver instead of MS SQL Driver for compatibility between older PHP and newer SQL Servers?是否应该使用 FreeTDS 驱动程序而不是 MS SQL 驱动程序来实现旧 PHP 和新 SQL Server 之间的兼容性?
【发布时间】: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


【解决方案1】:

你说

我之所以问这个问题是因为微软官方文档说如果我的 PHP 版本低于 7.*,我将无法连接到较新版本的 SQL Server。

这个 php 5.4 连接真的应该与最新的 SQL 一起使用吗 服务器尽管微软官方文档说它不应该?

...但实际上,Microsoft documentation you're talking about 并没有说您不能从 PHP 5.4 连接到 SQL Server。

他们说您不能(或至少不支持)通过使用 Microsoft Drivers for PHP for SQL Server 来做到这一点 - 这是文档所讨论的特定产品。

FreeTDS 是一个不同的驱动程序。通过更换驱动程序,你已经更换了微软说你不应该使用的东西。 AFAIK Microsoft 没有参与 FreeTDS,因此他们支持什么以及他们的驱动程序可以使用什么完全取决于他们。

【讨论】:

  • 谢谢。我正在查看 FreeTDS 文档以获取某种兼容性描述表,就像我从 Microsoft 文档中附加的那个一样。您是否看到过类似的与 FreeTDS 版本、PHP 版本和 MS SQL Server 版本相关的内容?
  • freetds.org/faq.html#Does.FreeTDS.support.my.serverfreetds.org/userguide/choosingtdsprotocol.htm 大约是我能找到的最接近的。不幸的是,它不包括最新的 SQL Server 版本,但既然你已经让它工作了,我们可以假设至少有一些兼容性。我怀疑您是否会获得 FreeTDS 与 PHP 的兼容性,因为在您的情况下,您使用 ODBC 作为两者之间的兼容层,所以实际上 PHP 对您的 FreeTDS 安装一无所知(它只知道 ODBC),并且反之亦然。
  • you're using ODBC as a compatibility layer in between, so in fact PHP doesn't know anything about your FreeTDS install (it only knows about ODBC), and vice-versa +1
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多