簡體   English   中英

如何使用PHP PDO從Mac連接到Sql Server?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM