Petit Guide sur la connexion à MS SQL 6.x+ via Openlink/PHP/ODBC

Auteur : Zili Zhang

Adaptation française: Simon Depiets

Relecture de la version française: Prénom Nom

3.0.fr.1.0, 07-02-2004

Résumé

Comment se connecter à un serveur de bases de données via les fonctions OBCD de PHP3 (de version 3.0.1x ou ultérieure) compilé avec les pilotes OpenLink sous Linux.


Table des matières

1. Introduction
1.1. Droits d'auteurs
1.2. Avertissement
2. Openlink
2.1. Sur le client
2.2. Sur le serveur
2.3. Configuration avant le test
2.4. Test avec odbctest
3. PHP
4. Exemple
5. Foire Aux Questions

1. Introduction

Ce document décrit comment se connecter à une base de données serveur MS SQL 6.x+ via les fonctions OBCD de PHP3 (de version 3.0.1x ou ultérieure) compilé avec les pilotes OpenLink sous Linux.

Dans le monde d'Unix, les gens peuvent détester être amenés à utiliser un logiciel lié à M$. Mais dans le monde réel, votre patron peut vous demander de stocker des données dans une base de données MS SQL sur NT et de lancer des applications Web sous Linux. Que faire? Donner votre démission ou vous asseoir pour lire ce document. Si vous avez choisi la seconde proposition, je vais vous donner un guide d'installation pour que vous puissiez garder votre travail pour un moment. C'est un guide sur le comment (How-to) pas le pourquoi (Why-so). Ne me demandez donc pas pourquoi il y a abc au lieu de cba. Je ne saurais vous répondre.

Le PHP devient de plus en plus populaire chez les programmeurs Web, surtout parce qu'il peut être configuré pour se connecter à beaucoup de bases de données comme Oracle, MySQL, Solid, etc. Mais pour un serveur MS SQL, le problème est différent. Malgré que vous puissiez utiliser Sybase-ct de PHP pour vous connecter à MS-SQL, beaucoup de gens préfèrent se connecter (moi le premier) via OBDC.

En utilisant OpenLink OBDC en Middleware, vous pouvez utiliser ses fonctions OBDC_xxxx pour se connecter à toutes les bases de données pour lesquelles OBDC à un pilote. Vous devrez installer Le client OpenLink Linux, le serveur Middleware et enfin recompiler PHP pour qu'il supporte les fonctions ODBC. A la fin, j'ai fait un exemple de script.

1.1. Droits d'auteurs

Copyright © 2001 par Zili Zhang S.

Vous pouvez copier et distribuer gratuitement ce document dans n'importe quel format. Il est demandé que les corrections et commentaires soient retournés au responsable du document. Vous pouvez créer un travail dérivé et le distribuer si :

  • Vous envoyez votre travail dérivé (si possible au format sgml) au LDP (Projet de Documentation Linux) ou tout autre site. Si ce n'est pas le site du LDP, alors laissez le LDP savoir où il est disponible.

  • Vous mettez le travail dérivé sous cette même licence ou utilisez la GPL. Incluez une notice sur les droits d'auteurs et au moins un lien pointant vers la licence utilisée.

  • Vous donnez les remerciements dus au précédents auteurs et au contributeurs.

Si vous considérez que vous faites un travail dérivé autre qu'une traduction, il est demandé que vous en discutiez avec le responsable actuel.

1.2. Avertissement

L'auteur dénie toute responsabilité en cas de dommages causés à une personne ou à un équipement, dus directement ou indirectement au respect de ces instructions.

Ce document est dérivé du fichier texte trouvé sur http://www.silen.net/openlink-php-odbc.txt.

2. Openlink

Cette étape est un peu compliquée. Vous devrez travailler à la fois sur votre client Linux et sur votre Serveur NT.

2.1. Sur le client

  • Depuis ftp://www.openlinksw.com/,téléchargez install.sh et likoxglc.taz (pour un système libc6) ou likoxxxx.taz (pour un système libc5).

  • mkdir /usr/local/openlink

  • copiez install.sh et likoxglc.taz vers /usr/local/openlink

  • cd /usr/local/openlink

  • sh install.sh, le script d'installation vous demandera les noms du propriétaire et de son groupe. Il extraira les fichiers vers le dossier odbcsdk dans /usr/local/openlink et copiera .odbc.ini dans votre répertoire personnel (home).

2.2. Sur le serveur

  • Depuis ftp://www.openlinksw.com/, téléchargez ntadm65x.zip sur votre serveur NT.

  • unzip ntadm65x.zip

  • cd disk1 — dossier ou vous avez extrait le paquet.

  • exécutez setup et suivez les instructions pour installer le middleware Openlink.

  • n'oubliez pas de mettre une séquence de démarrage d'OpenLink dans le menu démarrer ou dans le Centre de Contrôle.

2.3. Configuration avant le test

  • gardez le fichier .odbc.ini dans votre répertoire personnel.

  • copiez udbc.ini depuis le dossier bin du dossier d'installation du middleware OpenLink vers le dossier /etc de votre client.

  • éditez le fichier /etc/udbc.ini. Dans la section [dsn_sql6] , changez l'hôte, la base de données, le nom d'utilisateur et le mot de passe pour qu'ils conviennent aux options du serveur. Ici on peut voir une partie de mon fichier /etc/udbc.ini :

    [dsn_sql6]
    Host            = 10.0.0.1
    ServerType      = sql6
    ;ServerOptions  =
    Database        = pubs
    ;FetchBufferSize = 30
    UserName        = sa
    Password        = xxxxxxx
    
  • ajoutez LD_LIBRARY_PATH='/usr/local/openlink/odbcsdk/lib' à votre environnement et exportez le. Dans un Shell csh, saisissez : setenv LD_LIBRARY_PATH /usr/local/openlink/odbcsdk/lib

2.4. Test avec odbctest

  • cd /usr/local/openlink/odbcsdk/examples

  • ./odbctest

  • saisissez : dsn=dsn_sql6

  • quand « sql> » apparaît, vous pouvez exécuter vos commandes sql pour tester la connexion.

3. PHP

Maintenant nous avons Openlink et pouvons faire la compilation du PHP. Notez que pour cette version, PHP de version 3.0.10 ou ultérieure est nécessaire pour le fonctionnement.

  • Depuis http://www.php.net, téléchargez php-3.0.11.tar.gz

  • Effectuez les étapes suivantes:

    gzip -dc php-3.0.11.tar.gz|tar -xof -
    
    cd php-3.0.11
    
    ./configure --with-openlink (--with-mysql --with-gd=/usr/local/gd1.3 --enable-track-vars)
    
        NOTE: Ma configuration est faite pour pouvoir lancer du PHP en mode CGI, mais elle supporte aussi MySQL. Votre configuration peut être différente.
    
    make --silent
    
        NOTE: Ne vous inquiétez pas si il y a des messages d'erreur.
    
    make install
    
    
    Cela installera les exécutables php dans /usr/local/bin. Avant d'exécuter php, copiez les fichiers librairies de /usr/local/openlink/odbcsdk/lib vers /usr/lib pour rendre plus facile au code php l'accès aux librairies OpenLink. (Je sais qu'il y a un meilleur moyen.)

4. Exemple

Référez vous au manuel de PHP pour les fonctions OBDC. Voila mon exemple de code obdc.php3 : (Notez que obdc_num_rows() ne retournera rien, vous devrez donc appeler obdc_fetch_row() pour obtenir ce nombre.)

<?
/* voila quelques variables d'environnement que vous pouvez tester pour vérifier
 * si tout marche correctement
 */
putenv("LD_LIBRARY_PATH=/usr/local/openlink/odbcsdk/lib");
putenv("UDBCINI=/etc/udbc.ini");
putenv("ODBCINI=/root/.odbc.ini");
putenv("DebugFile=/tmp/udbc.out");      // fichier de résultat du débuggage

$dsn="DSN=dsn_main";    // notez que 'DSN=' est demandé
$user="sa";
$password="xxxxxxx";

$sql="SELECT * FROM titles";

/* mode d'exécution directe                        */
if ($conn_id=odbc_connect("$dsn",$user,$password)){
        echo "connecté au DSN: $dsn<br><br>";
        if($result_id=odbc_do($conn_id, $sql)) {
                echo "execute '$sql'<br><br>";
                        $num_fields=odbc_num_fields($result_id);
                        if($num_fields>0){
                                echo "Nombre de champs:
$num_fields<br>";
                                for($i=1;$i<=$num_fields;$i++){

$field_name[$i-1]=odbc_field_name($result_id,$i);
                                }
                                $num_rows=0;
                                while(odbc_fetch_row($result_id)){
                                        for($i=1;$i<=$num_fields;$i++){

$result[$num_rows][$field_name[$i-1]]=odbc_result($result_id,$i);
                                        }
                                        $num_rows++;
                                }
                                echo "Nombre de rangs: $num_rows<br>";
                        }else{
                                echo "pas de champs retournés. <br><br>";
                        }
                echo "Résultats:<br>";
                for($i=0;$i<sizeof($result);$i++){
                        while(listq($key,$value)=each($result[$i])){
                                echo "$i:$key=$value<br>";
                        }
                }
                echo "traitement du résultat<br><br>";
                odbc_free_result($result_id);
        }else{
                echo "ne peut exécuter '$sql'<BR><BR>";
        }
        echo "fermeture de la connexion $conn_id";
        odbc_close($conn_id);
}else{
        echo "ne peut se connecter au DSN: $dsn<br><br>";
}
?>

5. Foire Aux Questions

  • Est-ce exactement la même procédure avec MSSQL 7.0 ?

    Oui, Openlink mettra à jour ses logiciels vers la 7.0, mais je ne sais pas quand.

  • J'ai suivi ce document étape par étape pour installer les pilotes openlink mais je me suis arrêté à l'étape de l'"installation de ntadm65x.zip". J'ai essayé de lancer le logiciel de requêtes OpenLink et j'ai eu cette erreur :

    impossible d'ouvrir l'outil de contrôle des services <5>
    appuyez sur ENTREE pour quitter oplrqb
    

    Pourriez vous me dire comment résoudre ce problème?

    Cela doit être un problème avec NT lui-même. Essayez de redémarre le PC puis de lancer le service OpenLink depuis Panneau de Configuration/Contrôle des services.