[英]How can I connect to Sql Server from a Mac with PHP 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數據庫? 似乎這是應該可能的事情。
這對你有幫助嗎?
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文件中的名稱
dblib是需要在unix系統上與mssql一起使用的驅動程序
你無需安裝任何其他東西,
<?php
$dsn = 'dblib:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
在查看了很多線程后,我發現使用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 extension = pdo_dblib.so
8.-重啟Apache
9.-使用dblib dsn連接:
$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");
感謝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
請注意,Microsoft已為此發布了PHP7擴展,但如果您仍在使用PHP5.x,那對您沒有幫助。 我已成功使用不同的堆棧進行連接:freetds,odbc,pdo。
我正在使用OS X 10.11.6(El Capitan)和Macports,PHP5.6。
我首先在名為myserver.database.windows.net
的服務器上創建名為mydb
的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做了相同的工作,並指出了我的權利所有這一切的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.