TUTORIELS 
PHP et les SGBD (3) : Sybase et MS SQL Server
Troisième partie de notre série explorant les alternatives à MySQL lors d'un développement de site PHP.  (23 octobre 2003)
 
Discutez en sur les forums
Nous continuons notre série à propos des bases autres que MySQL avec lesquelles PHP peut travailler. Après PostgreSQL et FireBird/InterBase, nous abordons ici encore deux bases : Sybase Adaptive Server et Microsoft SQL Server.

Aborder ces deux bases dans un même article n'est pas anodin : SQL Server a été créé par Sybase pour UNIX en 1987, puis co-développé par Sybase, Microsoft et Ashton-Tate à partir de 1988, pour son port sur OS/2, puis NT. A partir de 1993, Microsoft et Sybase ont chacun développé leur propre SQL Server, jusqu'à ce que Sybase décide d'éviter la confusion en renommant le sien Adaptive Server en 1995.
Leur histoire fait que ces deux bases ont beaucoup en commun, au point que certaines fonctions PHP dédiées à MS-SQL sont en fait des fonctions Sybase, renommées pour la clarté du code. Etudier l'une et l'autre en même temps semble donc naturel... Cela étant, les années ayant passées, chacune s'est créé quelques particularités (T-SQL pour SQL Server, intégration Java poussée pour AS), donc c'est au développeur d'utiliser la base qui réponde le mieux à ses besoins.

Précisions
Lors de l'installation, il est recommandé d'avoir les configurations suivantes...
...pour Sybase : avoir compilé PHP avec le module Sybase Anywhere, qui permet la connexion à la base. Cependant, les fonctions fournies par PHP (compilé correctement) devraient être suffisantes pour un apprentissage.
...pour SQL Server sous système UNIX : avoir installé FreeTDS, une bibliothèque permettant d'utiliser ce SGBD sans pour autant devoir passer par un système Windows.

Les équivalences MySQL - Sybase/SQL Server dans PHP
Comme d'habitude, voici une courte table des équivalences des principales fonct
ions PHP de gestion de base de données. Sauf indication contraire, vous pouvez renommer sybase_ en mssql_ selon le SGBD utilisé :

Fonctions équivalentes
MySQL
Description
Equivalent Sybase/SQL Server
mysql_create_db()
mysql_drop_db()
Créé/détruit une base de données
Aucun : se fait par l'intermédiaire de requêtes SQL.
mysql_query()
mysql_db_query()
Lance une requête
sybase_query()
mysql_fetch_row()
mysql_fetch_array()
mysql_fetch_object()
mysql_fetch_assoc()
mysql_fetch_field()
Récupère des résultats d'un requête
sybase_fetch_row()
sybase_fetch_assoc()
sybase_fetch_object()
sybase_fetch_assoc()
sybase_fetch_field()
mysql_error()
mysql_errno()
Gestion des erreurs de requête
sybase_get_last_message()
 
mysql_connect()
mysql_pconnect()
mysql_close()
Lance/ferme une connexion à la base
sybase_connect()
sybase_pconnect()
sybase_close()
mysql_insert_id()
Renvoi l'identifiant de la dernière requête
aucune : requêtes SQL
mysql_num_rows()
mysql_num_fields()
Renvoi le nombre de ligne ou de champ d'un résultat
sybase_num_rows()
sybase_num_fields()
mysql_free_result()
Libère la mémoire
sybase_free_result()

Comparativement, PHP supporte quelques fonctions spécifiques de plus pour SQL Server que pour Sybase : par exemple, mssql_init(), mssql_bind() et mssql_execute() pour gérer les procédures stockées, ou encore msssql_next_result() pour déplacer le pointeur vers le résultat suivant, ce qui peut s'avérer pratiquer.
De son coté, Sybase dispose de sybase_unbuffered_query() (requête non bloquante, à utiliser avec précaution), de sybase_deadlock_retry_count() (configure le nombre d'essais en cas de blocage) et de sybase_set_message_handler() (configure le gestionnaire de messages).
En outre, les deux systèmes ont droit à des fonctions dont ne dispose pas MySQL : *_min_error_severity() et *_min_message_severity() (ainsi que deux supplémentaire pour Sybase concernant le client et le serveur), qui permettent de définir les niveaux de sévérité à partir desquels la base réagira.

Application
L'utilisation simple de Sybase/SQL Server est assez proche de celle de MySQL:

<?php
  $hote = 'nomServeur';
  $utilisateur = 'aspdotnet';
  $passe ='c#>j2me';
  $db = sybase_connect($hote, $utilisateur, $passe);
  $requete = 'SELECT id,prix FROM livresZope';
  $resultat = sybase_query($db, $requete);
  while ($row = sybase_fetch_object($resultat))
    {
    ?><?=$row->id . ": " $row->prix . "<br>\n";?><?
    }
  sybase_free_result($resultat);
  sybase_close($db);
?>

Il s'agit ensuite de maîtriser les spécificités de chaque base...

Se lancer
Utiliser Sybase ou SQL Server avec PHP, quelque soit le système d'exploitation, requiert de recompiler PHP avec les extensions adéquates (expliquées sur les pages de PHP.net : MS SQL, Sybase).
Il existe un hack de phpMyAdmin pour Sybase : le bien-nommé phpSybaseAdmin. Encore en bêta, il peut néanmoins rendre quelques bons services. A notre connaissance, il n'existe pas d'équivalent pour SQL Server...

Sybase propose un document de départ permettant de débuter l'utilisation de leur base avec PHP.
La section MSDN du site de Microsoft propose une page très complète sur l'utilisation de SQL Server, malheureusement rarement en rapport avec PHP. On y trouvera cependant quelques renseignements utiles, qu'il faudra transposer...

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page