如果您在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数据库?似乎这是应该可能的事情。
答案 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做了相同的工作,并指出了正确的方向。