La boîte à Tutoriels de Christopher PECAUD

Accéder à une base de données SQL Server à partir d'un environnement Apache/PHP/Mysql

Laisser un commentaire

SOMMAIRE


I Introduction
II Prérequis
1. Configuration de PHP
2. Mise à jour du fichier PHP.ini
3. Vérification de la configuration
III Accéder à une base de données Microsoft SQL server avec PHP
1. Connexion au serveur de base de données
2. Envoyer une requête au serveur
3. Exploiter les données retournées
4. Libération des ressources de la requêtes
5. Fermeture de la connexion
IV Conclusion

I Introduction

Un environnement Apache/PHP/MySQL n’est par défaut pas configuré pour travailler avec une base de données Microsoft SQL Server. Mais ceci est tout à fait possible moyennant quelques prérequis. Nous allons voir dans ce tutoriel donc dans un premier temps comment configurer l’environnement pour pouvoir se connecter à MS SQL Server. Nous verrons dans un second temps comment mettre en place un script pour accéder aux données d’une base de données existante.

II Prérequis

Commençons par configurer notre serveur pour qu’il puisse accéder à notre serveur de données Microsoft SQL Server. En effet en l’état actuel des choses il n’est pas possible de le faire. Donc il est nécessaire de configurer à la fois PHP et Apache pour qu’ils puissent reconnaître ce type de serveur de base de données. Nous allons supposer à ce stade que vous avez déjà installé votre environnement Apache/PHP/MySQL de production ou de développement grâce à WAMP, ou EasyPHP sous Windows par exemple. Il existe des installateurs similaires pour Mac OS X ou linux (LAMP ou MAMP).

1. Configuration de PHP

Il faut dans un premier temps télécharger le fichier « php_sqlsrv_53_ts_vc9.dll » et le placer dans le répertoire d’extensions de PHP (pour moi C:\EasyPHP\PHP\php539xxxxx\ext). Ce fichier est spécifique à la version 5.3 de PHP. Pour d’autres versions il faut prendre la version correspondante. Ce fichier est téléchargeable ici. Il existe deux packages différents :

  • Drivers pour PHP pour SQL Server en version 2.0 pour se connecter à un serveur SQL Server 2008 R2 ;
  • Drivers pour PHP pour SQL Server en version 3.0 pour se connecter à un serveur SQL Server 2012.

Vous avez des distributions x64 et x86, donc veillez à bien télécharger la version correspondante à votre système d’exploitation.

2. Mise à jour du fichier PHP.ini

Une fois que le fichier téléchargé a été placé dans le répertoire d’extension, il suffit de le déclarer dans le fichier php.ini (celui qui se trouve dans le répertoire conf_files). Dans la section PHP_ext à la fin du fichier rajoutez la ligne suivante :

extension=php_sqlsrv_53_ts_vc9.dll 

Normalement, le changement doit être automatique et vous n’avez pas à redémarrer le serveur. Mais si ceci ne fonctionne pas, redémarrez-le.

3. Vérification de la configuration

UVous pouvez lancer un script avec la foncton phpinfo(), pour vérifier que le serveur a bien pris en compte la nouvelle configuration.

Vous devriez voir une section sqlsrv. Avec un champ enabled positionné à On.

Si vous en êtes à ce stade vous pouvez continuer ce tutoriel.

III Accéder à une base de données Microsoft SQL server avec PHP

Avec RapidWeaver, il est tout à fait possible de gérer les métadonnées, de rajouter des propriétés CSS, du code JavaScript, et du code PHP avant le contenu. Tout cela se fait dans la fenêtre de l’ « inspecteur de page » lié à la page. Nous allons voir ceci dans cette partie.

1. Connexion au serveur de base de données

La connexion au serveur de base de données se fait par l’intermédiaire de la fonction sqlsrv_connect. Cette fonction prend comme argument :

  • Le nom du serveur c’est-à-dire le nom de l’hôte suivi du nom de l’instance (ex : Ordinateur\SQLEXPRESS)
  • Les infos de connexion la plupart du temps cela se résume au nom de la base de données existante sur l’instance, vous pouvez rajoutez les paramètres de login et mot de passe, s’ils ne sont pas spécifier alors il s’agit d’une authentification Windows. C’est un tableau associatif.

Voici un exemple de code permettant de se connecter à la base de données :


$serverName = "nom_du_serveur\nom_de_l_instance";
$connectionInfo = array( "Database"=>nom_de _la_base);
//Connexion en utilisant l'authentification Windows
$conn = sqlsrv_connect( $serverName, $connectionInfo);

2. Envoyer une requête au serveur

Une fois connecté au serveur de base de données, vous pouvez lui envoyer une requête pour qu’il puisse vous retourner par exemple des données en retour. Pour se faire il suffit d’utiliser la fonction sqlsrv_query qui prend en argument :

  • La variable de connexion retourné par la fonction sqlsrv_connect ;
  • Le deuxième paramètre correspond à la requête que l’on souhaite envoyer au serveur.
  • Le troisième paramètre est facultatif et vous permet de spécifier des paramètres au cas où vous voudriez créer une requête paramétrée.
  • Le quatrième paramètre vous permet de spécifier quelques options comme le QUERY_TIMEOUT par exemple.

Cette fonction retourne en résultat une ressource de requête. Si la requête ne renvoie pas de résultat alors cette ressource est vide. Il est bon avant d’appeler cette fonction de tester la variable de connexion pour savoir si celle-ci a bien été effectuée. Voici un exemple d’appel à cette fonction :


$qr = sqlsrv_query($conn, $sql);

Il va donc falloir tester la valeur de $qr pour vérifier que celle-ci n’est pas nulle.

3. Exploiter les données retournées

Si la requête retourne des résultats vous pouvez exploiter les données en appelant la fonction sqlsrv_fetch qui prend en argument le résultat de la requête retourné précédemment. Celle-ci permet d’accéder à une ligne de résultat. Et pour accéder à chaque champ retourné par une ligne il est nécessaire d’utiliser la fonction sqlsrv_get_field qui prend en argument le résultat de la requête (ici $qr) et l’indice du champ. Cet indice dépend du nombre de champ que vous avez spécifié dans la clause SELECT de votre requête.

A noter que si le champ est de type date il va falloir le convertir en chaîne de caractères si vous voulez l’afficher plus tard dans votre script. Pour ce faire il est nécessaire d’écrire un code semblable au suivant :


sqlsrv_get_field($qr, 3, SQLSRV_PHPTYPE_STRING( SQLSRV_ENC_CHAR))

Une autre voie pour accéder aux données retournées est d’utiliser la fonction sqlsrv_fetch_array. Cette fonction permet de retourner les valeurs de champ d’une ligne lue dans un tableau associatif. Cette fonction prend en argument :

  • Le résultat de la requête retourné par la fonction sqlsrv_query.
  • Le type de tableau à retourner.

Vous avez le choix entre SQL_FETCH_NUMERIC qui permet de créer un tableau indexé ou encore SQL_FETCH_ASSOC pour créer un tableau associatif. Vous avez encore le choix de SQL_FETCH_BOTH qui combine les deux modèles.

Dans le cas de la création d’un tableau indexé on peut utiliser le code suivant :


$params = array();
$i = 1 ;
//Envoi de la requête au serveur de base de données et récupération du résultat
$qr = sqlsrv_query($conn, $query);
while ($row = sqlsrv_fetch_array($qr, SQLSRV_FETCH_NUMERIC))
{
	$params[$i] = $row[0];
	$i= $i +1;
}

4. Libération des ressources de la requêtes

Une fois la requête exploitée dans son intégralité il est nécessaire de libérer les ressources associées cela se fait par l’intermédiaire de la fonction sqlsrv_free_stmt qui prend en argument le résultat de la requête. Il est à noter que si la fonction est appelé au cœur d’une boucle d’extraction de données celle-ci met fin à l’extraction et la requête n’est plus utilisable il faut donc faire attention.

5. Fermeture de la connexion

Afin de libérer toutes les ressources il est nécessaire de se déconnecter du serveur de base de données. Ceci est effectué grâce à la fonction sqlsrv_close qui prend en argument la variable de connexion retournée par la fonction sqlsrv_connect.

VII Conclusion

Vous avez pu voir par l’intermédiaire de ce tutoriel qu’il est facile de se connecter à un serveur de base de données Microsoft SQL server moyennant quelques prérequis nécessaires afin d’exécuter dans de bonnes conditions vos scripts d’extraction de données issues d’une base de données SQL Server.

blog comments powered by Disqus
RapidWeaver Icon

Made in RapidWeaver