如何使用PHP PDO从Mac连接到Sql Server?

2022-08-30 15:20:38

如果您在Google上搜索此问题,您会发现许多不正确,误导性和过时的信息。令人惊讶的是,Stack Overflow上没有一个可靠的答案,所以我们应该改变这一点。

我正在使用Apache和PHP的Mac端口安装。我已经安装了php5-mssql,我可以在我的phpinfo()页面上看到mssql。

但我没有看到它列在PDO下。

PDO support enabled
PDO drivers     dblib, mysql, odbc, pgsql 

mssql 是否与 PDO 无关?是否有其他驱动程序可以在Mac上使用PDO连接到SqlServer数据库?似乎这是应该可能的事情。


答案 1

这对你有帮助吗?

http://blog.nguyenvq.com/2010/05/16/freetds-unixodbc-rodbc-r/

我使用FreeTDS从Linux服务器连接到Microsoft SQL服务器,看起来上面链接中的人已经使用FreeTDS从Mac连接。

这是我的 /etc/freetds/freetds.conf 文件(我添加的唯一部分是在 XYZ 服务器的最后):

[global]
        # TDS protocol version
;       tds version = 4.2

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff

        # Command and connection timeouts
;       timeout = 10
;       connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.  
        # Try setting 'text size' to a more reasonable limit 
        text size = 64512

# Define a connection to the MSSQL server.
[xyz]
        host = xyz
        port = 1433
        tds version = 8.0

[由提问者编辑]

FreeTDS配置是答案的前半部分。配置完成后,您应该能够从命令行运行类似的东西并进行连接:

tsql -S xyz -U username -P password

然后,您需要使用 dblib,而不是 mssql 作为 PDO 驱动程序:

$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname",
                "$dbuser","$dbpwd");

其中 $dbhost 是 freetds.conf 文件中的名称


答案 2

在查看了许多线程之后,我发现使用PHP 7或更早版本从Mac OS X连接到MSSQL的最佳方法是使用dblib。(只需下载正确的php版本)

您可以按照以下说明(忽略 mssql.so 扩展名)轻松连接:

https://github.com/BellevueCollege/public-docs/blob/master/PHP/configure-mssql-pdodblib-mac.md

它与OS X El Capitan,Bitnami和PHP 7完美配合。

步骤 1.- 安装 XCode

$ xcode-select ---install

2.- 安装自制软件

3.- 使用自制软件安装自动函数。

$ brew install autoconf

4.- 安装 FreeTDS

$ brew install freetds

5.- 下载您的PHP源代码版本并解压缩它。

6.- 构建 PDO DBLIB 扩展(PHP 5.5.14 的示例)

$ cd php-5.5.14/ext/pdo_dblib
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-pdo-dblib=/usr/local/
$ make
$ sudo cp modules/pdo_dblib.so /usr/lib/php/extensions/no-debug-non-zts-20121212

7.- 将 .so extensio 添加到 php.ini extension=pdo_dblib.so

8.- 重新启动 Apache

9.- 使用 dblib dsn 连接:

$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");

推荐