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 ?
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.
2. 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.
3.
J'ai mis à jour vers PHP 4, et maintenant MySQL me dit toujours
"Warning: MySQL: Unable to save result set in ...". Que se passe-t-il ?
Il est quasiment sûr que PHP 4 a été compilée avec l'option
--with-mysql sans donner le
chemin vers MySQL. Cela signifie que PHP
utilise sa bibliothèque cliente MySQL incluse. Si votre système exécute des
applications qui utilisent d'autres versions de clients MySQL, comme
PHP 3 en module Apache concurrent, ou auth-mysql, il y a un conflit
entre les deux versions de ces bibliothèques clientes.
4.
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.
5.
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.
6.
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()); ?>