Utiliser SQL Server avec PHP depuis une Debian

Logo SQL ServerVoici 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());
}

 

Share Button

Laisser un commentaire.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.