29

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

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

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

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

mssql 与 PDO 没有关联吗?是否有另一个驱动程序可以在 Mac 上使用 PDO 连接到 SqlServer 数据库?似乎这应该是可能的。

4

5 回答 5

16

这对你有帮助吗?

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 文件中的名称

于 2012-11-20T14:59:38.890 回答
5

dblib是 unix 系统上需要与 mssql 一起使用的驱动程序

无需您安装其他任何东西,

<?php
    $dsn = 'dblib:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);
于 2012-11-24T05:13:11.373 回答
5

在查看了许多线程之后,我发现使用 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.- 使用 Homebrew 安装 autoconf。

$ brew install autoconf

4.- 安装 FreeTDS

$ brew install freetds

5.- 下载您的 PHP Source 版本并解压缩。

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 扩展名添加到 php.ini 扩展名=pdo_dblib.so

8.- 重启 Apache

9.- 使用 dblib dsn 连接:

$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");
于 2016-06-08T15:57:54.400 回答
1

感谢 Esteban 的精彩指南(https://stackoverflow.com/a/37707426),它成功地帮助我安装了 pdo_dblib 驱动程序。

但是,我在使用提供的 dblib dsn 从 OSX 10 与 PHP (5.5) 和 FreeTDS 连接到我的 Azure SQL 数据库时遇到问题。最终为我解决的问题是将 Azure 数据库 (m53man42a) 附加到我的 username

我在 PHP 中的 dblib PDO 连接:

$conn = new PDO("dblib:host=azure-sql;dbname=my-database-name", 
"username@m53man42a",
"my-secret-password");

我的 FreeTDS.conf:

[azure-sql]
host = m53man42a.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8
text size = 20971520

考虑将其添加为列表中的第 10 号项目符号...:D

于 2016-09-20T08:05:54.083 回答
1

请注意,Microsoft 已为此发布了 PHP7 扩展,但如果您仍在使用 PHP5.x,那对您没有帮助。我已经成功地使用不同的堆栈进行连接:freetds、odbc、pdo。

我正在使用 OS X 10.11.6 (El Capitan) 和 Macports,PHP5.6。

我首先创建了一个 Azure SQL 数据库,该数据库mydb在名为myserver.database.windows.net. 重要的是要记住打开防火墙到您的客户端 IP 地址,您在服务器上执行此操作。

第一步是使用 ODBC 驱动程序及其 PHP 连接器安装 freetds(将 php56 更改为您的 PHP 的正确版本):

sudo port install freetds +odbc
sudo port install php56-odbc

接下来,您需要在配置文件中包含一些行:

/opt/local/etc/odbcinst.ini

[FreeTDS]
    Description = ODBC for FreeTDS
    Driver      = /opt/local/lib/libtdsodbc.so
    Setup       = /opt/local/lib/libtdsodbc.so
    FileUsage   = 1

这告诉 odbc 库在哪里可以找到它的 odbc 驱动程序。

/opt/local/etc/freetds/freetds.conf

[myserver]
    host = myserver.database.windows.net
    port = 1433
    tds version = 7.0

这告诉 freetdc 库在哪里可以找到您的服务器。

/opt/local/etc/odbc.ini

[myds]
Description = Test for SQL Server on Azure
Driver = FreeTDS
Trace = Yes
TraceFile = /var/log/sql.log
Database = mydb
Servername = myserver
UserName = myusername
Password = mypassword
Port = 1433
Protocol = 7.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No

这将创建一个名为myds指向您的数据库的数据源,使您能够连接以下 PHP:

$conn = new PDO('odbc:myds', 'myusername', 'mypassword');

如果其中任何一个对您不起作用,请首先使用以下命令检查 freetds 安装是否正确:

tsql -S myserver -U myusername -P mypassword

然后使用以下命令检查 ODBC 规范是否正常:

isql -v myds myusername mypassword

感谢https://github.com/lionheart/django-pyodbc/wiki/Mac-setup-to-connect-to-a-MS-SQL-Server,它为 Python 完成了同等的工作,并指出了我的正确方向这一切的方向。

于 2017-09-29T15:17:51.093 回答