Consid�rations sur les bases de donn�es

Cette section traite de questions relatives aux relations entre PHP et les bases de donn�es. Oui, PHP peut acc�der virtuellement � n'importe quelle base de donn�es disponible aujourd'hui.

  1. J'ai entendu dire qu'il �tait possible d'acc�der � Microsoft SQL Server � partir de PHP. Comment est-ce possible ?
  2. Puis-je acc�der � des bases Microsoft Access ?
  3. PHP 5 n'inclut plus les biblioth�ques clientes MySQL, qu'est ce que �a implique pour moi ? Puis-je toujours utiliser MySQL avec PHP ? J'essaie d'utiliser MySQL, mais j'obtiens des erreurs "undefined function".
  4. Apr�s avoir ajout� le support partag� de MySQL, Apache plante d�s que libphp4.so est charg�. Comment r�soudre ce probl�me ?
  5. Pourquoi est ce que j'obtiens une erreur comme celle-ci : "Warning: 0 is not a MySQL result index in <file> on line <x>" ou "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>" ?

J'ai entendu dire qu'il �tait possible d'acc�der � Microsoft SQL Server � partir de PHP. Comment est-ce possible ?

Sur une machine Windows, vous pouvez tout simplement utiliser le support ODBC inclus avec le pilote ODBC ad�quat.

Sur des machines Unix, vous pouvez utiliser le pilote Sybase-CT pour acc�der � Microsoft SQL Server car il est (en grande partie) compatible. Sybase a fourni une » version libre des biblioth�ques n�cessaires pour Linux. Pour les autres syst�mes Unix, vous devez contacter Sybase pour obtenir les biblioth�ques ad�quates. Jetez aussi un oeil � la r�ponse � la question suivante.

Puis-je acc�der � des bases Microsoft Access ?

Oui. Vous avez d�j� tous les outils n�cessaires si vous utilisez uniquement Windows 9x/Me, ou NT/2000, et que vous utilisez ODBC avec les pilotes ODBC pour Microsoft Access.

Si vous utilisez PHP sur une machine Unix et que vous voulez vous connecter � une base Access sur une machine Windows, vous aurez besoin des pilotes ODBC Unix. » OpenLink Software fournit des pilotes ODBC pour Unix qui peuvent le faire.

Une autre solution consiste � utiliser un serveur SQL qui a des pilotes ODBC Windows et l'utiliser pour stocker les donn�es, que vous pouvez utiliser � partir de Microsoft Access (en utilisant ODBC) et PHP (en utilisant les pilotes inclus), ou bien utiliser un format de fichier interm�diaire que Access et PHP peuvent traiter tous les deux, comme des fichier bruts ou des bases de donn�es dBase. � ce sujet, Tim Hayes de Openlink software �crit :

Utiliser une autre base de donn�es comme interm�diaire n'est pas une bonne id�e lorsque vous pouvez utiliser ODBC de PHP directement vers vos bases de donn�es - par exemple avec les pilotes Openlink. Si vous avez besoin d'un format de fichier interm�diaire, Openlink a publi� Virtuoso (un moteur de base de donn�es virtuel) pour NT, Linux et d'autres plates-formes Unix. Visitez notre » site pour un t�l�chargement gratuit.

Une solution qui a fait ses preuves est d'utiliser MySQL et ses pilotes ODBC sous Windows et de synchroniser les bases de donn�es. Steve Lawrence �crit :

  • Installez MySQL sur votre plate-forme conform�ment aux instructions de MySQL. Vous pouvez l'obtenir sur » http://www.mysql.com/. Aucune configuration particuli�re n'est n�cessaire, mis � part que lorsque vous configurez une base de donn�es et un compte utilisateur, il faille sp�cifier % dans le champ host, ou bien le nom de la machine Windows avec laquelle vous voulez acc�der � MySQL. Notez bien votre nom de serveur, d'utilisateur et votre mot de passe.
  • T�l�chargez les pilotes MyODBC pour Windows � partir du site de MySQL. Installez les sur votre machine Windows. Vous pouvez tester votre installation avec les utilitaires fournis avec les pilotes.
  • Cr�ez un utilisateur ou une source de donn�es syst�me dans votre administration ODBC, dans le panneau de configuration. Donnez un nom de source de donn�es dsn, entrez votre nom d'h�te, identifiant, mot de passe, port, etc. pour la base de donn�es configur�e � l'�tape 1.
  • Installez Access avec une installation compl�te pour �tre s�r d'avoir tous les composants n�cessaires... Vous aurez besoin d'au moins le support ODBC et le gestionnaire de tables li�es.
  • Maintenant, la partie amusante ! Cr�ez un acc�s � une base de donn�es. Dans la fen�tre de la table, cliquez droit et s�lectionner Lier les Tables, ou, dans le menu Fichier, s�lectionnez Obtenir des donn�es externes et alors Lier les Tables. Quand la fen�tre de gestion de fichiers appara�t, s�lectionnez les fichiers de type : ODBC. S�lectionnez dsn Syst�me et le nom de votre dsn cr��e � l'�tape 3. S�lectionnez la table � lier, cliquez sur OK, et voil� ! Vous pouvez maintenant ouvrir la table et ajouter/supprimer/�diter des donn�es sur votre serveur MySQL ! Vous pouvez ainsi ex�cuter des requ�tes, importer/exporter des tables vers MySQL, construire des formulaires et des rapports, etc.

Trucs et astuces :

  • Vous pouvez construire vos tables dans Access et les exporter dans MySQL, puis les lier de nouveau. Cela rend la cr�ation de table tr�s rapide.
  • Lorsque vous cr�ez des tables dans Access, vous devez avoir une cl� primaire d�finie pour avoir acc�s en �criture � la table. Assurez-vous que vous avez bien cr�� une cl� primaire dans MySQL avant de lier le tout � Access.
  • Si vous changez une table dans MySQL, vous devez la lier de nouveau � Access. Allez dans Outils>suppl�ments>gestionnaire de tables li�es, cherchez votre DSN ODBC, et s�lectionnez la table � lier de nouveau. Vous pouvez aussi changer votre source dsn � partir de l�, en cliquant sur l'option toujours demander pour un nouvel emplacement avant de presser OK.

PHP 5 n'inclut plus les biblioth�ques clientes MySQL, qu'est ce que �a implique pour moi ? Puis-je toujours utiliser MySQL avec PHP ? J'essaie d'utiliser MySQL, mais j'obtiens des erreurs "undefined function".

Oui. PHP supportera toujours MySQL, d'une fa�on ou d'une autre. Le seul changement avec PHP 5 est que nous ne compilons plus la biblioth�que cliente en elle-m�me. En voici en vrac quelques justifications :

  • La plupart des syst�mes incluent maintenant les biblioth�ques clientes.

  • Ainsi, avoir plusieurs versions des biblioth�ques peut �tre g�nant. Par exemple, si vous liez mod_auth_mysql � une version et PHP � une autre, et que vous les activez tous les deux dans Apache, vous obtenez un joli plantage. Ainsi, la biblioth�que cliente incluse avec PHP ne fonctionnait pas toujours bien. Le sympt�me le plus g�nant �tait que le chemin vers le socket Unix mysql.sock n'�tait pas le bon.

  • La maintenance en �tait lourde et le devenait de plus en plus au fur et � mesure des versions.

  • Les versions futures de la biblioth�que seront publi�es sous licence GPL et nous ne pouvons pas inclure une telle biblioth�que car sa licence n'est pas compatible avec un projet sous licence de type BSD/Apache. Un tel changement dans PHP 5 semble �tre la meilleure solution.

Ceci n'affectera pas tant que �a les utilisateurs. Les utilisateurs d'Unix, au moins ceux qui savent ce qu'ils font, ont tendance � compiler PHP avec les biblioth�ques d�j� install�es sur leur syst�me, simplement en sp�cifiant --with-mysql=/usr lors de la configuration de PHP. Les utilisateurs de Windows peuvent activer l'extension php_mysql.dll dans leur php.ini. Pour plus de d�tails, lisez la r�f�rence MySQL sur les instructions d'installation. Assurez-vous �galement que libmysql.dll est disponible dans le PATH du syst�me. Pour plus de d�tails sur cela, lisez la FAQ sur la configuration du PATH sur les syst�mes Windows. Comme libmysql.dll (et plusieurs fichiers relatifs � PHP) existe dans le dossier de PHP, il est recommand� d'ajouter le dossier de PHP � votre PATH syst�me.

Apr�s avoir ajout� le support partag� de MySQL, Apache plante d�s que libphp4.so est charg�. Comment r�soudre ce probl�me ?

Ceci arrive quand vos biblioth�ques MySQL sont li�es � pthreads. V�rifiez que vous utilisez ldd. Sinon, t�l�chargez les sources de MySQL et compilez-les ou bien refaites un paquet RPM � partir des sources en enlevant l'option qui active le client thread� dans le fichier de spec. L'une ou l'autre de ces solutions corrigera le probl�me. Recompilez alors PHP avec les nouvelles biblioth�ques MySQL.

Pourquoi est ce que j'obtiens une erreur comme celle-ci : "Warning: 0 is not a MySQL result index in <file> on line <x>" ou "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>" ?

Vous essayez d'utiliser un identifiant de r�sultat qui vaut 0. Le 0 indique que votre requ�te a �chou� pour une quelconque raison. Vous devez alors chercher les erreurs apr�s avoir ex�cut� une requ�te et avant m�me de vouloir traiter le r�sultat. Une fa�on propre de le faire est de coder comme ceci :

<?php

$result 
mysql_query("SELECT * FROM tables_priv");
if (!
$result) {
    echo 
mysql_error();
    exit;
}
?>

ou

<?php

$result 
mysql_query("SELECT * FROM tables_priv")
    or die(
"Bad query: " mysql_error());
?>