[TUTO] Agir sur ses bdd MSSQL depuis PHP/Apache sous Linux

sql2008

Microsoft MS SQL est très largement employé en entreprise (surtout en PME, du moins, je pense). Vous pouvez avoir besoin d’interagir avec votre base de donnes Microsoft SQL depuis un serveur web sous Linux équipé de Apache et PHP (ca a été du moins mon cas et j’ai eu beaucoup de mal à trouver les informations nécessaires d’où ce tuto). Voyons ensemble comment faire.

Configuration

Pour ce tuto, j’utilise une Debian Etch 5.0 sur lequel sont installés PHP 5.0 et Apache 2.0 (via phpMyAdmin). Toutefois, de par le principe même de fonctionnement de PHP/Apache/MSSQL, l’installation et le fonctionnement devrait être, à peu près, le même pour les autres distribution Linux. Ma base de données est sous Microsoft SQL 2005. Pour se connecter et interagir avec, nous utiliserons les fonctions MSSQL, qui fonctionnent via les librairies FreeTDS.

lamp-logo

Il est aussi possible de faire fonctionner les librairies sous Windows avec un lot de configurations mais cela ne sera pas abordé dans cet article. Si c’est votre cas, vous pouvez vous rapporter à cet article.

Installation des composants pré-requis

Comme expliqué plus haut, pour se connecter et interagir avec Microsoft SQL, nous allons utiliser MSSQL. Mssql est inclus dans les librairies FreeTDS. On installe donc ces librairies, directement depuis Synaptic ou avec les lignes de commande (à taper dans un terminal) :

apt-get install freetds-dev

apt-get install freetds-common

ATTENTION : pour fonctionner, les manipulations en ligne de commande de ce tuto requièrent les droits administrateur. Sous Debian on passe administrateur en tapant la commande su et en entrant son mot de passe administrateur. Sous Ubuntu, on utilise sudo.

mssql1

Une fois les librairies FreeTDS installée on va éditer le fichier php.ini. Pour ce faire, on va taper la commande :

gedit /etc/php5/apache2/php.inimssql2

(J’utilise l’éditeur graphique gedit. Si vous n’utilisez pas d’interface graphique, dans le cas du SSH par exemple, vous pouvez utilisez l’éditeur VI)

Le fichier doit contenir une section [MSSQL] contenant ces paramètres :

mssql3

Nous allons affiner le paramétrage de MSSQL de sorte qu’il ressemble à ceci :

[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1

; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1

; Minimum error severity to display.
mssql.min_error_severity = 1000

; Minimum message severity to display.
mssql.min_message_severity = 1000

; Compatibility mode with old versions of PHP 3.0.
mssql.compatability_mode = Off

; Connect timeout
mssql.connect_timeout = 5

; Query timeout
mssql.timeout = 60

; Valid range 0 – 2147483647.  Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 – 2147483647.  Default = 4096.
;mssql.textsize = 4096

; Limits the number of records in each batch.  0 = all records in one batch.
;mssql.batchsize = 0

; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
;mssql.datetimeconvert = On

; Use NT authentication when connecting to the server
mssql.secure_connection = On

; Specify max number of processes. -1 = library default
; msdlib defaults to 25
; FreeTDS defaults to 4096
;mssql.max_procs = -1

; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
;mssql.charset = "ISO-8859-1"

Une fois la manipulation achevée, on enregistre le php.ini et on redémarre apache. Pour redémarrer Apache, on tape cette commande :

/etc/init.d/apache2 restart

mssql4

Il ne reste plus qu’à attaquer son code PHP pour se connecter à Microsoft SQL et à interagir avec.

Connexion et interaction via PHP

Pour se connecter à la base de données, nous allons utiliser les fonctions MSSQL. Pour pouvez toutes les retrouver (ainsi que leurs explications respectives) à cette adresse. Dans son fichier PHP, on passe simplement ces arguments :

- le nom du serveur de bases de données

- le compte utilisateur (compte SQL ou compte Windows)

- le mot de passe

- le nom de la base de donnée

Dans mon exemple j’interroge la base de donnée toto pour lui demander le contenu des lignes nom et prenom (de la table personne) pour qui le mail est tata@toto.fr (oui, c’est ce qu’on appelle un code bidon pour l’exemple). On obtient un code qui ressemble alors à ca :

<?php
$host = "monserveur";
//remplacer monserveur par le nom ou l’adresse IP de votre serveur Microsoft SQL.
$user = "sa";
//on peut aussi utiliser un identifiant de type DOMAINEuser
$mdpbdd  = "monmotdepasse";
$bdd = "toto";

mssql_connect($host, $user,$mdpbdd) or die("erreur de connexion au serveur");
mssql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$query = "select nom, prenom from personne where mail=’tata@toto.fr’";
$req = mssql_query($query);

// Recuperation des resultats
while($row = mssql_fetch_row($req)){
$nom = $row[0];
$prenom = $row[1];

echo $nom;
echo $prenom;
};

mssql_close();

?>

Du reste, vous pouvez alors jouer avec votre base de données via les classiques commandes SQL.

sql

Troubleshooting

De ce que j’ai pu lire, le bug le plus courant avec mssql (que j’ai d’ailleurs moi aussi rencontré) est code retour php: Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server

mssql5

Concrètement, face à ce cas de figure, vérifiez les paramètres de connexion (nom du serveur, identifiants de connexion, bdd) et assurez vous de pouvoir pinger le serveur depuis votre poste Linux. Si c’est bien le cas, contrôlez que vos librairies FreeTDS sont bien installées. Si c’est le cas, redémarrer Apache avec la commande /etc/init.d/apache2 restart devrait résoudre le problème.

mssql4

Si vous avez d’autres cas de figures où MSSQL pose problème, n’hésitez pas à me le faire savoir, si nous trouvons la réponse (ou si vous la connaissez) je mettrais à jour la partie troubleshooting de cet article.

Vus : 637
Publié par Geek de France : 203