Banner
Banner
Banner

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

Par - le juillet 20th, 2010

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.

Tags: , , , , , ,

12 commentaires to “[TUTO] Agir sur ses bdd MSSQL depuis PHP/Apache sous Linux”

    salle de poker :

    Il est également possible de faire fonctionner les bibliothèques sur Windows avec beaucoup de configurations, mais il ne sera pas abordé dans cet article. Si c’est votre cas, vous pouvez vous référer à cet article.

    Fast-Searches :

    Merci pour ce tutorial, j’ai pu mettre en place le système sans trop de difficulté (ubuntu).
    Et je dois dire que c’est remarquable.
    Je vous en remercie

    Bonne continuation

    clovis tresor :

    ok merci pour ce tuto très détaillé mais j’aimerais savoir comment executer le code php en question pour voir si tout marche comme prevu

    TimCruz :

    @clovis tresor : je comprends pas ta question. Tu as dans l’article un script qui se connecte et récupère des infos…

    clovis tresor :

    oui je vois mais en fait après avoir ecrit le script comment je le teste? c’est ce que j’aimerais savoir

    TimCruz :

    @clovis tresor : dans le cas de mon exemple, on interroge une table personne contenant les champs nom, prenom, mail et on affiche les nom, prenom de la personne dont le mail est tata@toto.fr

    Après tu adaptes selon le contenu de ta BDD…

    clovis tresor :

    c’est qu’on ne comprend pas en fait j’aimerais savoir après avoir ecrit ce script quel commande dois-je taper pour l’executer?

    TimCruz :

    @clovis tresor : je ne suis vraiment pas sûr de te suivre alors je vais t’énoncer des fondamentaux : il s’agit ici d’un script PHP. Pour le consulter, le plus simple est – sur ton apache paramétré selon ce tuto – de créer un fichier toto.php et d’y coller le code plus haut. Puis tu consultes l’URL http://tonapacahe/toto.php

    Pour découvrir php : http://php.net/manual/en/tutorial.php

    clovis tresor :

    comment voir si ton code marche comme tu l’espère?

    TimCruz :

    Le script fait un echo des valeurs. S’il ne t’affiche rien c’est que ça ne marche pas!

    clovis tresor :

    ok justement je sais pas comment faire pour voir qu’il m’affiche quelque chose parce que quand je lance dans un navigateur rien ne s’affiche stp aide moi je suis sur un projet actuellement qui me demande de me connecter à une base sql server 2000 via un code php sous linux

Laissez un commentaire

Catégorie(s): Software, Tutos