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

时间:2012-11-14 00:30:38

标签: php sql-server pdo

如果您在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数据库?似乎这是应该可能的事情。

5 个答案:

答案 0 :(得分: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文件中的名称

答案 1 :(得分:5)

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

无需安装任何其他内容,

<?php
    $dsn = 'dblib:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);

答案 2 :(得分: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.-安装Homebrew

3.-使用Homebrew安装autoconf。

$ 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 延长= pdo_dblib.so

8.-重启Apache

9.-使用dblib dsn连接:

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

答案 3 :(得分:1)

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

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

我在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

答案 4 :(得分:1)

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

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

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

第一步是安装带有ODBC驱动程序的freetds及其PHP连接器(将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做了相同的工作,并指出了正确的方向。