Installation du driver Microsoft SQL Server pour PHP

publicité
Migrer un script PHP vers SQL Server
Utiliser le driver Microsoft SQL Server pour PHP
Avertissement
Dans le cadre de cet article, nous avons besoin d’un environnement complet de développement (PHP
sous IIS7 avec MySQL et SQL Server Express 2008). La mise en place de cet environnement est
abordée dans deux autres articles :
-
« Web Platform Installer » pour l’installation de PHP sous IIS7 ;
« Framework PHP sous IIS : Copix Framework » pour l’installation de SQL Server Express
2008.
Préambule
Dans cet article, nous allons voir les opérations à effectuer pour qu’un script PHP faisant appel à des
données stockées dans une base de données MySQL utilise finalement ces mêmes données, mais
placées dans une base de données SQL Server Express 2008.
Nous utiliserons pour cela le driver SQL Server pour PHP fourni et maintenu par Microsoft. Grâce à la
Web Platform Installer, nous allons également voir comment procéder à son installation.
Nous supposerons que l’espace web est correctement configuré sous IIS7.
Notre script PHP avec MySQL
Voici un aperçu de notre script PHP faisant appel aux données hébergées au sein d’une base de
données MySQL.
Driver Microsoft SQL Server pour PHP | Adenova
1 / 14
Comme vous le voyez, il s’agit d’une simple liste de navigateurs présenté sous forme de tableau
HTML.
Dans notre cas, l’URL d’accès à ce script est http://localhost/browsers/list.php. C’est ainsi qu’il a été
défini grâce au Gestionnaires des Services Internet.
Installation du driver Microsoft SQL Server pour PHP
Pour cela, nous utiliseront Web Platform Installer. Pour y accéder, nous lançons le Gestionnaire des
Services Internet, normalement accessible dans la liste des programmes.
Dès que le Gestionnaire des Services Internet est lancé, double-cliquez sur l’icône Web Platform
Installer. Patientez quelques secondes avant qu’apparaisse la liste des fonctionnalités proposées à
l’installation.
Driver Microsoft SQL Server pour PHP | Adenova
2 / 14
Activez l’option « Microsoft SQL Server Driver for PHP 1.0 » puis cliquez sur le bouton « Install ».
Acceptez les termes de licence, puis attendez que l’installation se termine et cliquez sur le bouton
« Close » à la fin de celle-ci.
Driver Microsoft SQL Server pour PHP | Adenova
3 / 14
Le driver Microsoft SQL Server pour PHP s’installe comme extension de PHP. Nous allons vérifier que
cette extension est bien installée.
Créons simplement le script PHP « info.php » ci-dessous :
<?php
phpinfo();
?>
Pour être simple et rapide, nous le plaçons dans la même arborescence web que notre script PHP qui
affiche la liste des navigateurs. Dans notre cas, il s’agit du dossier « C:\work\web\browsers ».
Pour retrouver le dossier d’une application ou d’un site défini avec IIS, utilisez le Gestionnaire des
Services Internet. Dans la zone latérale gauche, accédez à la liste des sites, faîtes un clic droit sur le
site concerné, puis choisissez la commande « Gérer une application », puis « Paramètres avancés… ».
Vous obtenez alors la fenêtre ci-dessous :
La ligne « Chemin d’accès physique » contient le dossier où sont placés les sources de l’application ou
du site.
Nous appelons ensuite le script « info.php » que nous venons de créer à l’URL
http://localhost/browsers/info.php. Cela va nous permettre de vérifier que l’extension « SQLSRV »
est bien installée.
Driver Microsoft SQL Server pour PHP | Adenova
4 / 14
Transfert des données dans SQL Server
Génération d’un fichier SQL
Nous allons maintenant effectuer une exportation des données contenues dans la base de données
MySQL. Pour cela, nous utilisons l’utilitaire « mysqldump ».
Cet utilitaire se trouve dans l’arborescence d’installation de MySQL. Nous lançons donc une invite de
commandes en mode administrateur :
Et nous y saisissons la commande ci-dessous :
mysqldump.exe -u root -p browsers > C:\work\web\browsers.sql
Bien sûr, vous devez adapter le nom de l’utilisateur, l’accès sur mot de passe, le nom de la base de
données, ainsi que le dossier et le nom du fichier SQL de sortie.
Modification du fichier SQL généré
Nous allons apporter quelques modifications au fichier SQL que nous venons de générer pour qu’il
devienne compatible avec SQL Server. Ces modifications ont déjà été abordées et présentées dans
Driver Microsoft SQL Server pour PHP | Adenova
5 / 14
deux autres articles (« Framework PHP sous IIS : Copix Framework » et « Framework PHP sous IIS :
Zend Framework »).
Vous trouverez cependant ci-dessous la liste des modifications que nous avons apportées à notre
fichier SQL.
Ouvrez donc le fichier « browsers.sql » dans votre éditeur préféré pour y apporter les modifications
ci-dessous :
-
Supprimez toutes les guillemets simples ou doubles qui encadrent les noms des tables et des
champs ;
Complétez le chemin d’accès aux tables en ajoutant devant tous les noms des tables
l’information ci-dessous (ceci doit être fait pour les requêtes CREATE TABLE et INSERT) :
browsers.dbo.nomdematable1
-
Supprimer toutes les mentions ci-dessous (elles se trouvent derrière la déclaration de
création de table) :
ENGINE=MyISAM AUTO_INCREMENT=57 DEFAULT CHARSET=utf8
Il est important de vérifier que les fins de déclaration de création de table (CREATE TABLE) se
terminent toujours bien par un point-virgule.
-
-
Si des champs sont déclarés en AUTO_INCREMENT, remplacez cette mention par IDENTITY ;
Si des champs sont déclarés en UNIQUE KEY nom (champ), remplacez cette mention par
CONSTRAINT nom UNIQUE(champ) ;
Supprimer la ligne : DROP TABLE IF EXISTS browsers.dbo.browsers; ;
Supprimer la ligne : LOCK TABLES browsers.dbo.browsers WRITE; ;
Supprimer la ligne : UNLOCK TABLES; ;
Supprimer toutes les définitions de longueur des champs INT ou TINYINT (par exemple
INT(11) doit devenir simplement INT) ;
Dans les requêtes INSERT, supprimer tous les champs et valeurs associées qui sont définis en
IDENTITY ;
Protéger éventuellement les champs qui portent des noms réservés pour SQL Server par des
crochets (nous n’avons pas dans notre cas) ;
Doubler les éventuels guillemets droits simples présents dans les contenus des champs de
type TEXT ou VARCHAR (par exemple, si on a comme texte : 'Petite soirée d\'hiver' »,
alors il doit devenir : 'Petite soirée d''hiver') ;
Supprimer éventuellement les \r\n présents dans les contenus des champs de type TEXT ou
VARCHAR ;
Supprimer tous les commentaires placés au début du fichier, avant la première requête SQL
(les suivantes ne devraient pas poser de problème).
Enregistrez les modifications : notre fichier est prêt pour être importé dans SQL Server Express 2008.
Driver Microsoft SQL Server pour PHP | Adenova
6 / 14
Création de la base de données SQL Server
Si l’outil « Microsoft SQL Server Management Studio » n’est pas lancé, lancez-le, indiquez le login
« sa » et le mot de passe associé. Le champ « Nom du serveur » doit correspondre au nom de votre
ordinateur.
Dans la zone supérieure gauche de l’outil, nous faisons un clic droit sur « Base de données » puis
nous choisissons l’option « Nouvelle base de données… ». Nous renseignons la boîte de dialogue qui
s’affiche comme ci-dessous :
Driver Microsoft SQL Server pour PHP | Adenova
7 / 14
Pour paramétrer l’encodage de la base de données, il faut cliquer à gauche sur « Options » et choisir
dans le menu « Classement » la valeur « SQL_Latin1_General_CP1_CI_AS ».
Nous validons en cliquant sur le bouton « OK ». Notre base de données est maintenant créée,
comme nous le montre l’illustration qui suit :
Driver Microsoft SQL Server pour PHP | Adenova
8 / 14
Création des tables et des données
Nous allons maintenant créer les tables et les données dans SQL Server Express 2008 en utilisant
notre fichier SQL modifié.
Dans la zone latérale gauche, déployez la liste des bases de données, et faîtes un clic droit sur la base
de données « browsers » que nous venons de créer. Choisissez l’option « Nouvelle requête », puis
faîtes un copier – coller du contenu du fichier « browsers.sql » modifié dans la partie centrale qui
apparaît.
Dans le menu « Affichage », « Barres d’outils », vérifiez que « Editeur SQL » soit coché. Pour envoyer
les requêtes SQL au serveur, cliquez sur le bouton « Exécuter ».
Driver Microsoft SQL Server pour PHP | Adenova
9 / 14
La table et des données nécessaires au fonctionnement de notre script sont maintenant placées au
sein de notre base de données « browsers » sur SQL Server Express 2008.
Modification du script PHP
Nous allons maintenant modifier le script PHP chargé d’afficher notre liste de navigateurs pour qu’il
utilise les données stockées dans la base de données « browsers » de SQL Server Express 2008.
Script PHP original
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>Liste des navigateurs</title>
</head>
<body>
<h1>Liste des navigateurs</h1>
<?php
// Connexion au serveur
$link = mysql_connect("localhost", "root", "motdepasse")
or die ("Impossible de se connecter : " . mysql_error());
// Sélection de la base de données
mysql_select_db('browsers', $link);
// Récupère la liste des navigateurs
$result = mysql_query("SELECT * FROM browsers ORDER BY browser");
if (!$result) {
die ("Requête invalide : " . mysql_error());
}
if (mysql_num_rows($result) == 0) {
die ("Aucune ligne trouvée, rien à afficher.");
}
?>
<table summary="Liste des navigateurs" border="1">
<thead>
<tr>
<th>ID</th>
<th>Moteur</th>
<th>Navigateur</th>
<th>Plateforme</th>
Driver Microsoft SQL Server pour PHP | Adenova
10 / 14
<th>Version</th>
<th>CSS Grade</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysql_fetch_assoc($result)) {
?>
<tr>
<td><?= print $row['id']; ?></td>
<td><?= print $row['engine']; ?></td>
<td><?= print $row['browser']; ?></td>
<td><?= print $row['platforms']; ?></td>
<td><?= print $row['version']; ?></td>
<td><?= print $row['cssgrade']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
// Fermeture de la connexion
mysql_close($link);
?>
</body>
</html>
Modification de la connexion
La première des choses à faire, c’est de modifier les paramètres de connexion. Nous remplaçons
donc les lignes ci-dessous :
// Connexion au serveur
$link = mysql_connect("localhost", "root", "motdepasse")
or die ("Impossible de se connecter : " . mysql_error());
// Sélection de la base de données
mysql_select_db('browsers', $link);
Par :
// Connexion au serveur
$connectionInfo = array(
'PWD' => 'motdepasse',
'Database' => 'browsers',
'UID' => 'sa'
);
$link = sqlsrv_connect("BASILIC", $connectionInfo)
or die ("Impossible de se connecter : " . print_r(sqlsrv_errors(), true));
Il faut évidemment remplacer les valeurs ci-dessus représentées en gras, souligné et italique par vos
valeurs.
Modification de la demande de requête
Remplaçons maintenant la fonction d’envoi de requête. Les lignes suivantes :
Driver Microsoft SQL Server pour PHP | Adenova
11 / 14
// Récupère la liste des navigateurs
$result = mysql_query("SELECT * FROM browsers ORDER BY browser");
if (!$result) {
die ("Requête invalide : " . mysql_error());
}
Deviennent :
// Récupère la liste des navigateurs
$result = sqlsrv_query($link, "SELECT * FROM browsers ORDER BY browser");
if (!$result) {
die ("Requête invalide : " . print_r(sqlsrv_errors(), true));
}
Pour tester si au moins une rangée nous est retournée, nous remplaçons les lignes ci-dessous :
if (mysql_num_rows($result) == 0) {
die ("Aucune ligne trouvée, rien à afficher.");
}
Par :
if (!sqlsrv_rows_affected($result)) {
die ("Aucune ligne trouvée, rien à afficher.");
}
Modification de l’affichage
Pour afficher les informations dans le tableau, nous remplaçons les lignes :
<?php
while ($row = mysql_fetch_assoc($result)) {
?>
<tr>
<td><?= print $row['id']; ?></td>
<td><?= print $row['engine']; ?></td>
<td><?= print $row['browser']; ?></td>
<td><?= print $row['platforms']; ?></td>
<td><?= print $row['version']; ?></td>
<td><?= print $row['cssgrade']; ?></td>
</tr>
<?php
}
?>
Par :
<?php
while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
?>
<tr>
<td><?= print $row['id']; ?></td>
<td><?= print $row['engine']; ?></td>
<td><?= print $row['browser']; ?></td>
<td><?= print $row['platforms']; ?></td>
<td><?= print $row['version']; ?></td>
<td><?= print $row['cssgrade']; ?></td>
Driver Microsoft SQL Server pour PHP | Adenova
12 / 14
</tr>
<?php
}
?>
Modification de la fermeture de la connexion
Pour terminer, nous modifions les lignes suivantes :
<?php
// Fermeture de la connexion
mysql_close($link);
?>
Par :
<?php
// Fermeture de la connexion
sqlsrv_close($link);
?>
Résultat
Et voilà le résultat !
Comparaison des prototypes
Pour vous aider, vous pouvez consulter l’URL http://msdn.microsoft.com/enus/library/cc296152(SQL.90).aspx (en anglais). Vous y trouverez la liste des principales fonctions SQL
Server proposées par le driver Microsoft SQL Server pour PHP.
Sinon, vous trouverez ci-dessous une comparaison des principales fonctions MySQL et SQL Server :
Driver Microsoft SQL Server pour PHP | Adenova
13 / 14
Fonctions MySQL
Fonction SQL Server
bool mysql_close([resource
$link_identifier])
sqlsrv_close(resource $conn)
resource mysql_connect([string $server [, sqlsrv_connect(string $serverName [,
string [, string $password [, bool
array $connectionInfo)
$new_link [, int $client_flags]]]]])
array mysql_fetch_array(resource $result
[, int $result_type])
sqlsrv_fetch_array(resource $stmt [, int
$fetchType])
object mysql_fetch_object(resource
$result [, string $class_name [, array
$params]])
sqlsrv_fetch_object(resource $stmt [,
string $className])
resource mysql_query(string $query [,
resource $link_identifier])
sqlsrv_query(resource $conn, string
$tsql[, array $params[, array $options]])
int mysql_affected_rows([resource
$link_identifier])
sqlsrv_rows_affected(resource $stmt)
Driver Microsoft SQL Server pour PHP | Adenova
14 / 14
Téléchargement