web-dev-qa-db-de.com

Wie kann ich von einem Mac aus eine Verbindung zum SQL Server herstellen? PHP PDO?

Wenn Sie diese Frage bei Google suchen, werden viele falsche, irreführende und veraltete Informationen angezeigt. Überraschenderweise gibt es keine solide Antwort auf Stack Overflow, also sollten wir das ändern.

Ich verwende die Mac-Port-Installation von Apache und PHP. Ich habe php5-mssql installiert und kann mssql auf meiner phpinfo () - Seite sehen.

Aber ich sehe es nicht unter PDO.

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

Ist mssql nicht mit PDO verbunden? Gibt es einen anderen Treiber, der auf einem Mac verwendet werden kann, um über PDO eine Verbindung zu einer SqlServer-Datenbank herzustellen? Anscheinend sollte dies möglich sein.

29
Eric Z Beard

Hilft Ihnen das?

http://blog.nguyenvq.com/2010/05/16/freetds-unixodbc-rodbc-r/

Ich verwende FreeTDS, um von einem Linux-Server aus eine Verbindung zu Microsoft SQL-Servern herzustellen, und es sieht so aus, als ob die Person im obigen Link FreeTDS für die Verbindung von einem Mac verwendet hat.

Hier ist meine /etc/freetds/freetds.conf -Datei (der einzige Teil, den ich hinzugefügt habe, war ganz am Ende für den XYZ-Server):

[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

[Bearbeiten vom Fragesteller]

Die FreeTDS-Konfiguration ist die erste Hälfte der Antwort. Nach der Konfiguration sollten Sie in der Lage sein, etwas von der Befehlszeile aus auszuführen und eine Verbindung herzustellen:

tsql -S xyz -U username -P password

Dann müssen Sie als PDO-Treiber dblib und nicht mssql verwenden:

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

Dabei ist $ dbhost der Name aus der Datei freetds.conf

16
Benny Hill

Nachdem ich mir viele Threads angesehen hatte, stellte ich fest, dass der beste Weg, um von Mac OS X aus mit PHP 7 oder älter eine Verbindung zu MSSQL herzustellen, die Verwendung von dblib ist. (Laden Sie einfach die richtige PHP-Version herunter)

Sie können diesen Anweisungen folgen (die mssql.so-Erweiterung ignorieren), um eine einfache Verbindung herzustellen:

https://github.com/BellevueCollege/public-docs/blob/master/PHP/configure-mssql-pdodblib-mac.md

Es funktionierte perfekt mit OS X El Capitan, Bitnami mit PHP 7.

Schritte 1.- Installieren Sie XCode

$ xcode-select ---install

2. Installieren Sie Homebrew

3.- Installieren Sie autoconf mit Homebrew.

$ brew install autoconf

4. Installieren Sie FreeTDS

$ brew install freetds

5.- Laden Sie Ihre Version von PHP Source herunter und dekomprimieren Sie sie.

6.- Erstellen Sie die PDO DBLIB-Erweiterung (Beispiel für 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.- Fügen Sie die Erweiterung .so zur Datei php.ini Extension = pdo_dblib.so hinzu

8.- Starten Sie Apache neu

9.- Verbinden Sie sich mit der dblib dsn:

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

dblib ist der Treiber, der auf Unix-Systemen mit mssql verwendet werden muss

Sie brauchen nichts anderes zu installieren,

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

Vielen Dank an Esteban für die Anleitung von Nice ( https://stackoverflow.com/a/37707426 ), die mir bei der Installation des Treibers pdo_dblib sehr geholfen hat. 

Ich hatte jedoch Probleme bei der Verbindung zu meiner Azure SQL-Datenbank von OSX 10 mit PHP (5.5) und FreeTDS mit der bereitgestellten dblib-dsn. Was für mich endgültig behoben wurde, war , indem die Azure-Datenbank (m53man42a) an meinen Benutzernamen angehängt wurde.

Meine Dblib-PDO-Verbindung in PHP:

$conn = new PDO("dblib:Host=Azure-sql;dbname=my-database-name", 
"[email protected]",
"my-secret-password");

Meine FreeTDS.conf:

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

Fügen Sie dies als Aufzählungsnummer 10 in Ihre Liste ein ...: D 

1
holm50

Beachten Sie, dass Microsoft dafür eine PHP7-Erweiterung veröffentlicht hat, aber wenn Sie noch PHP5.x verwenden, hilft Ihnen das nicht. Es ist mir gelungen, eine Verbindung mit einem anderen Stack herzustellen: freetds, odbc, pdo.

Ich verwende OS X 10.11.6 (El Capitan) mit Macports, PHP5.6.

Ich habe mit dem Erstellen einer Azure SQL-Datenbank namens mydb auf einem Server mit dem Namen myserver.database.windows.net begonnen. Denken Sie daran, die Firewall für Ihre Client-IP-Adresse zu öffnen, die Sie auf dem Server verwenden.

Zuerst müssen Sie Freetds mit dem ODBC - Treiber und seinem PHP - Connector installieren (ändern Sie php56 in die richtige Version Ihres PHP):

Sudo port install freetds +odbc
Sudo port install php56-odbc

Als nächstes müssen Sie einige Zeilen in Ihre Konfigurationsdateien aufnehmen:

/opt/local/etc/odbcinst.ini

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

Dadurch wird der odbc-Bibliothek mitgeteilt, wo sie ihren odbc-Treiber finden kann.

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

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

Dies teilt der freetdc-Bibliothek mit, wo sich der Server befindet.

/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

Dadurch wird eine Datenquelle mit dem Namen myds erstellt, die auf Ihre Datenbank verweist und die Verbindung mit dem folgenden PHP ermöglicht:

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

Wenn dies nicht funktioniert, prüfen Sie zunächst, ob die Installation von freetds korrekt ist:

tsql -S myserver -U myusername -P mypassword

Überprüfen Sie dann, ob die Angaben für ODBC in Ordnung sind.

isql -v myds myusername mypassword

Vielen Dank an https://github.com/lionheart/Django-pyodbc/wiki/Mac-setup-to-connect-to-a-MSMSQLServer , der die entsprechende Arbeit für Python ausführt und auf die verwiesen wird Ich bin für alles in die richtige Richtung.

0
xgretsch