Voici une procédure qui permet d’accéder à une base de donnée SQL Server en PHP depuis une Debian (testé sur les versions 7.7 et 8.0). C’est un mix de différents articles que j’ai lu sur le sujet.
Installer unixODBC
Télécharger la version 2.3.1.
Supprimer les éventuelles versions de unixODBC
dans un premier temps, puis procéder à l’installation.
apt-get remove libodbc1 unixodbc unixodbc-dev
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.1.tar.gz
tar xf unixODBC-2.3.1.tar.gz
cd unixODBC-2.3.1
./configure --disable-gui --disable-drivers --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE
make
make install
La librairie doit maintenant être présente dans le dossier /usr/local/lib/
.
Pour finir, lancer la commande suivante :
ldconfig
Installer FreeTDS
Il faut compiler FreeTDS en précisant en version par défaut la 7.2.
wget ftp://ftp.astron.com/pub/freetds/stable/freetds-stable.tgz
tar xf freetds-stable.tgz
cd freetds-0.91/
./configure --with-tdsver=7.2
make
make install
Installer le paquet nécessaire pour PHP
apt-get install php5-odbc
Configurer les connexions vers les serveurs SQL Server
Dans les exemples ci-dessous, je renseigne un serveur avec la clef “server_perso” dans le fichier freetds.conf
, clef que je réutilise dans la définition des deux DSN “mon_appli” et “mon_appli_test”.
Pour me connecter avec PDO, il suffit ensuite de renseigner la clef DSN, le user et le password.
#/usr/local/etc/odbcinst.ini
[FreeTDS]
Description = Open source FreeTDS driver
Driver = /usr/local/lib/libtdsodbc.so
#/usr/local/etc/odbc.ini
[mon_appli]
Driver = FreeTDS
Servername = server_perso
Description = Test MS SQL Database with FreeTDS
TDS Version = 7.2
Database = APPLI
[mon_appli_test]
Driver = FreeTDS
Servername = server_perso
Description = Test MS SQL Database with FreeTDS
TDS Version = 7.2
Database = APPLITEST
#/usr/local/etc/freetds.conf (à ajouter à la fin du fichier)
# SRVPERSO
[server_perso]
host = 192.168.1.50
instance = SRVPERSO
tds version = 7.2
Tester la connexion en PHP avec PDO
Créer un fichier /var/www/pdo-sqlserver.php
putenv('ODBCSYSINI=/usr/local/etc');
putenv('ODBCINI=/usr/local/etc/odbc.ini');
try {
$dbh = new PDO('odbc:mon_appli_test', 'monuser', 'monpassword');
} catch (PDOException $e) {
die('Connexion échouée : ' . $e->getMessage());
}
En cas d’erreur sur la locale, taper la commande suivante :
# cocher en_US.UTF-8, laisser le FR par défaut
dpkg-reconfigure locales
Autres commandes de test
telnet IP_OR_MSSQL_SERVER_NAME 1433
sqsh -S MY_DSN -U user -P password
sqlcmd -S xxx.xxx.xxx.xxx -d db_name -U username -P pass
isql –v MY_DSN user password
tsql -S MY_DSN -U username -P password
tsql -H SERVERINSTANCE -p 1433 -U username -P password
tsql -LH xxx.xxx.xxx.xxx
strace -e trace=open isql –v MY_DSN 2>&1
odbcinst -j # to check the ODBC version and configuration.
odbcinst -q -d # View loaded drivers
odbcinst -q -s # View DSN entry
osql -S DSN -U Username -P Password # list the configuration files loaded to connect ODBC
Dans le fichier freetds.conf, vous pouvez dé-commenter la ligne dump file = /tmp/freetds.log
Faire attention aux indentations dans les différents fichiers.
Installation pour Ubuntu 16.04 et supérieur
La procédure est beaucoup plus simple, il faut d’abord installer les paquets FreeTDS et DBLIB (Sybase) :
sudo apt-get install freetds-dev -y
sudo apt-get install php-sybase
Puis ajouter le serveur au fichier de config FreeTDS /etc/freetds/freetds.conf
:
[myserver]
host = 192.168.10.11
instance = MYSQLINSTANCE
tds version = 7.0
Pour finir on test la connexion dans un script PHP :
try {
$dbh = new PDO('dblib:host=myserver;dbname=MYDBNAME', 'user', 'password');
} catch (PDOException $e) {
die('Connexion échouée : ' . $e->getMessage());
}