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.
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
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");
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);
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
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.