web-dev-qa-db-fra.com

Comment puis-je me connecter à SQL Server à partir d'un Mac avec PHP AOP?

Si vous recherchez cette question sur Google, vous découvrirez de nombreuses informations incorrectes, trompeuses et obsolètes. Étonnamment, il n’ya pas de réponse solide à Stack Overflow, nous devrions donc changer cela.

J'utilise l'installation du port Mac d'Apache et de PHP. J'ai installé php5-mssql et je peux voir mssql sur ma page phpinfo ().

Mais je ne le vois pas énuméré sous PDO.

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

Est-ce que mssql n'est pas associé à PDO? Existe-t-il un autre pilote pouvant être utilisé sur un Mac pour se connecter à une base de données SqlServer à l'aide de PDO? On dirait que c'est quelque chose qui devrait être possible.

29
Eric Z Beard

Est-ce que cela vous aide?

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

J'utilise FreeTDS pour me connecter aux serveurs Microsoft SQL à partir d'un serveur Linux et il semble que la personne dans le lien ci-dessus ait utilisé FreeTDS pour se connecter à partir d'un Mac.

Voici mon fichier /etc/freetds/freetds.conf (la seule partie que j'ai ajoutée était à la toute fin du serveur 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

[Modifier par le demandeur]

La configuration de FreeTDS est la première moitié de la réponse. Une fois configuré, vous devriez pouvoir exécuter quelque chose comme ceci à partir de la ligne de commande et vous connecter:

tsql -S xyz -U username -P password

Ensuite, vous devez utiliser dblib, pas mssql, en tant que pilote PDO:

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

Où $ dbhost est le nom du fichier freetds.conf

16
Benny Hill

Après avoir examiné plusieurs threads, nous avons constaté que le meilleur moyen de se connecter à MSSQL à partir de Mac OS X avec PHP 7 ou une version antérieure était d'utiliser dblib. (Il suffit de télécharger la version php correcte)

Vous pouvez suivre ces instructions (en ignorant l’extension mssql.so) pour vous connecter très facilement:

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

Cela fonctionnait parfaitement avec OS X El Capitan, Bitnami avec PHP 7.

Étapes 1.- Installer XCode

$ xcode-select ---install

2.- Installer Homebrew

3.- Installez autoconf avec Homebrew.

$ brew install autoconf

4.- Installer FreeTDS

$ brew install freetds

5.- Téléchargez votre version de PHP Source et décompressez-la.

6.- Construire l’extension PDO DBLIB (Exemple pour 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.- Ajoutez le .so extensio à php.ini Extension = pdo_dblib.so

8.- Redémarrer Apache

9.- Connectez en utilisant le dblib dsn:

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

dblib est le pilote à utiliser avec mssql sur les systèmes unix

Pas besoin d'installer quoi que ce soit d'autre,

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

Merci Esteban pour le guide Nice ( https://stackoverflow.com/a/37707426 ) qui m'a aidé avec succès à installer le pilote pdo_dblib. 

Cependant, je rencontrais des problèmes pour me connecter à ma base de données SQL Azure à partir d’OSX 10 avec PHP (5.5) et FreeTDS à l’aide du nom dblib fourni. Ce qui a finalement été résolu pour moi, c'est l'ajout de la base de données Azure (m53man42a) à mon nom d'utilisateur.

Ma connexion PDO dblib en PHP:

$conn = new PDO("dblib:Host=Azure-sql;dbname=my-database-name", 
"username@m53man42a",
"my-secret-password");

Mon FreeTDS.conf:

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

Pensez à ajouter ceci sous la forme d'un point 10 dans votre liste ...: D 

1
holm50

Notez que Microsoft a publié une extension PHP7 pour cela, mais si vous êtes toujours sur PHP5.x, cela ne vous aidera pas. J'ai réussi à me connecter en utilisant une pile différente: freetds, odbc, pdo.

J'utilise OS X 10.11.6 (El Capitan) avec Macports, PHP5.6.

J'ai commencé par créer une base de données SQL Azure appelée mydb sur un serveur portant le nom myserver.database.windows.net. N'oubliez pas d'ouvrir le pare-feu avec l'adresse IP de votre client, ce que vous effectuez sur le serveur.

La première étape consiste à installer freetds avec le pilote ODBC et son connecteur PHP (remplacez php56 par la version correcte de votre PHP):

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

Ensuite, vous devez inclure quelques lignes dans vos fichiers de configuration:

/opt/local/etc/odbcinst.ini

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

Cela indique à la bibliothèque odbc où trouver son pilote odbc.

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

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

Cela indique à la bibliothèque freetdc où trouver votre serveur.

/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

Cela crée une source de données appelée myds pointant vers votre base de données, vous permettant de vous connecter avec le PHP suivant:

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

Si cela ne fonctionne pas pour vous, vérifiez d'abord que l'installation de freetds est correcte en utilisant:

tsql -S myserver -U myusername -P mypassword

Ensuite, vérifiez que les spécifications ODBC sont correctes en utilisant:

isql -v myds myusername mypassword

Merci à https://github.com/lionheart/Django-pyodbc/wiki/Mac-setup-to-connect-to-a-MS-SQL-Server , qui fait le travail équivalent pour Python et qui a fait le point moi dans la bonne direction pour tout cela.

0
xgretsch