php - 为了实现旧版 PHP 和新版 SQL Server 之间的兼容性,是否应该使用 FreeTDS 驱动程序而不是 MS SQL 驱动程序?

标签 php sql-server odbc database-administration freetds

我正在努力将我的 Drupal (7.43) 应用程序(托管在 PHP 5.4 服务器上)连接到 Microsoft Azure SQL 数据库。

我真的很沮丧,甚至发现自己正在与公司的 DBA 争论为什么要在最新版本的 SQL Server 上安装这个数据库?

编辑:

我之所以问这个问题,是因为 Microsoft 官方文档说,如果 PHP 服务器版本低于 7,则不应连接到较新版本的SQL Server。* .

System Requirements for the Microsoft Drivers for PHP for SQL Server https://learn.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版本。

Relation between php server and ms sql driver compatibility

TL;博士;

我使用 FreeTDS 将 5.4 PHP 应用程序连接到 Azure SQL Server!耶

FreeTDS is re-implementation of C libraries originally marketed by Sybase and Microsoft SQL Server. It allows many open source applications such as Perl and PHP (or your own C or C++ program) to connect to Sybase or 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 代表开放数据库连接——它是用于访问数据库管理系统的标准应用程序编程接口(interface)。

好吧,我然后安装了 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 版本以确保连接正常。

最佳答案

你说

The reason why I asked that was because of Microsoft official documentation which says I cannot connect to newer versions of SQL Server if my PHP version is below 7.*.

Is this php 5.4 connection really supposed to work with newest SQL Server despite the official Microsoft docs say it should not?

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

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

FreeTDS 是一个不同的驱动程序。通过替换驱动程序,您已经替换了 Microsoft 认为您不应该使用的内容。 AFAIK Microsoft 没有参与 FreeTDS,因此他们支持什么以及他们的驱动程序可以使用什么,完全取决于他们。

关于php - 为了实现旧版 PHP 和新版 SQL Server 之间的兼容性,是否应该使用 FreeTDS 驱动程序而不是 MS SQL 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60042083/

相关文章:

java - Pentaho 数据源向导

php - 在 Laravel 6.16 中调用未定义函数 App\Http\Controllers\Auth\array_get()

java - 我在连接 sql server 时遇到异常

sql-server - SQL Server 2008 - 如何压缩备份文件并移动到远程服务器

sql - 从sql中的XML中选择全部

java - 我收到名为“没有合适的驱动程序”的错误?

sql-server - 在客户端计算机上配置 SQL Native Client ODBC?

php - 更新不同表中的相同记录

php - 关闭标签页后 SESSION 仍然有效

javascript - 返回 false 不会停止表单提交