Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo
Sommaire > Bases de données
        Quelle base de données utiliser ?
        Comment sauvegarder une base de données ?
        Comment installer MySQLi ?
        Comment traiter une requête sélection ?
        Comment extraire les valeurs d'un SELECT multiple ?
        Comment mélanger un tableau de valeurs ?
        Comment travailler sur deux bases différentes dans le même script ?
        Comment configurer et se connecter à interbase ?
        Comment se connecter et travailler sur une base access ?
        Comment insérer un tableau (array) dans une table ?
        Comment faire pour demander à SQLServer d'interpréter les caractères spéciaux ?
        1.1. MySQL(19)
                Comment lancer une recherche dans ma base MySQL ?
                Comment se connecter à une base MySQL ?
                Comment se connecter à deux bases de données en même temps avec le même login ?
                Comment connaître le nombre de lignes retournées par une requête MySQL ?
                Comment connaître l'id auto_increment de mon dernier ajout ?
                Comment ouvrir une connexion persistante vers une base MySQL ?
                Comment obtenir le nom de mes bases de données ?
                Comment obtenir les noms de toutes mes tables dans une base de données ?
                Puis-je exécuter plusieurs requêtes SQL en un seul mysql_query() ?
                Comment afficher une date MySQL en français ?
                Comment convertir une date MySQL au format francophone ?
                Comment extraire des enregistrements appartenant à un intervalle de dates ?
                Comment afficher les valeurs DATE d'un SELECT ?
                Comment connaître le nombre d'enregistrements affectés par une requête de type : DELETE, INSERT ou UPDATE ?
                Comment se repositionner sur le premier enregistrement d'une requête Select ?
                Comment se positionner sur le dernier enregistrement d'une requête Select ?
                Comment afficher un enregistrement aléatoirement ?
                Explications et correction de l'erreur 'supplied argument is not a valid MySQL result resource'
                Comment utiliser de l'UTF-8 avec PHP / MySQL ?
        1.2. Oracle(2)
                Pourquoi mes requêtes SQL-ORACLE sont-elles automatiquement 'commitées' ?
                Quel équivalent en SQL-ORACLE du LIMIT du MySQL ?

precedent    sommaire    suivant   


Quelle base de données utiliser ?
auteur : Eric Berger
Tout dépend de ce que l'on veut en faire. Pour une petite base, le couple PHP - MySQL a largement fait ses preuves. Si le nombre de requêtes est important, que les performances deviennent donc déterminantes, MySQL ne tardera pas à montrer ses limites. Pour ce genre de besoins, des bases comme interbase ou Oracle. Dans ce cas, la notion de coût devra être prise en compte car contrairement à MySQL, interbase et Oracle ne sont pas gratuits.

Il existe plusieurs autres bases pour lesquelles PHP possède un jeu de fonctions. Chaque base ayant son lot de qualités et de défauts, les bases de données conseillées ci-dessous sont à considérer comme des exemples. Chaque situation demande une analyse plus approfondie pour déterminer quelle est la base la plus appropriée.

Ci-dessous, la liste des bases interfacées avec PHP (avec un lien vers la documentation officielle) :


Comment sauvegarder une base de données ?
auteur : Cyberzoide
Grâce à l'utilitaire phpMyAdmin, on va sauvegarder le schéma (c'est-à-dire la définition des tables) et les données (les lignes des tables) d'une base en particulier. (On ne peut pas sauvegarder plusieurs bases d'un seul coup.) Cette action de sauvegarde est appelée "faire un dump" en argot informatique.

Il faut choisir la base à sauvegarder en la choisissant dans le menu de gauche. Dans la page de droite, il s'affiche la liste des tables, et en bas toute une série d'actions possibles. On s'intéressera à "Afficher le schéma de la base".

On va choisir quelles tables en particulier sauvegarder (dans une balise SELECT). Ne rien sélectionner pour les sauvegarder toutes.

Ensuite on coche "structure seule" pour ne sauvegarder que le schéma de la base, ou "structure et données" pour sauvegarder le schéma ET les données, ou encore "Données seulement" pour sauvegarder les données sans le schéma.

Enfin on peut cocher quelques options :
  • "Ajouter des énoncés drop table" afin de supprimer et recréer les tables lors de l'importation de la sauvegarde.
  • "Protéger les noms des tables et des champs par des `" afin de protéger les noms avec accents des tables et des colonnes.
  • "Transmettre" afin de forcer le téléchargement du fichier texte contenant la sauvegarde, avec possibilité d'utiliser un algorithme de compression.
  • "Insertions étendues" permet de n'avoir qu'une seule requête INSERT pour les données d'une table, sous la forme INSERT INTO table VALUES((,,),(,,)(,,))
  • "Insertions complètes" permet d'inclure la liste des colonnes aux requêtes INSERT, selon la syntaxe : INSERT INTO table(,,,) VALUES(,,,)

Il ne reste alors plus qu'à cliquer sur le bouton "Exécuter".


Comment installer MySQLi ?
auteur : Cyberzoide
Pour installer MySQLi il faut rajouter les options suivantes à la directive ./configure lors de l'installation de PHP à partir des sources :
--with-mysqli=/usr/local/mysql/bin/ --without-mysql
/usr/local/mysql/bin/ est à remplacer par le chemin du binaire mysql_config de votre client MySQL.


Comment traiter une requête sélection ?
auteur : Eric Berger
(l'exemple utilise une base MySQL mais le principe est identique pour d'autres bases)

a)Préparation de la requête :
Une requête peut être écrite d'une traite si elle est simple et connue à l'avance, par exemple:
$requete = "SELECT nom, prenom from utilisateurs";
Si elle est plus complexe, ou peut changer en fonction du contexte (utilisateur, n° de page, etc..), la requête peut également être construite, par exemple :
$requete = "SELECT nom, prenom";
if($affichermailMail){
    $requete .=", mail" ;
}
$requete .= " FROM utilisateurs LIMIT $start, $elemParPage";
b)Connexion à la base de données :
Avant de pouvoir demander quoi que ce soit à une base de données, il faut établir une connexion avec elle :
$serveur = "localhost"; //nom du serveur qui héberge la base
$utilisateur = "jean";
$passe = "s03k45em";
$base = "site"  //nom de la base de données
$connexion = MySQL_connect($serveur, $utilisateur, $passe);
//Etablit la connexion, un identificateur de connexion est enregistré dans la variable $connexion
mysql_select_db($base);
//Définit la base par défaut. Ce n'est pas indispensable mais ça évite de spécifier la base à chaque requête.
c)Envoi de la requête et récupération du résultat :
$resultat = MySQL_Query($requete) or die("erreur dans la requete : " . $requete);
L'instruction or die() n'est pas indispensable mais aidera à trouver l'origine d'une erreur dans une requête.

d)Traitement du résultat :
Maintenant que nous avons le résultat de la requête, il faut encore le faire parler. Pour parcourir l'ensemble des enregistrements du résultat, on peut procéder de la manière suivante :
while($ctItem = mysql_fetch_array($resultat)){
    //Ici la variable $ctItem contient un tableau de l'élément courant
}
Pour plus de clarté, on peut affecter des variables aux éléments du tableau :
while($ctItem = mysql_fetch_array($resultat)){
    $nom = $ctItem[0];
    $prenom = $ctItem[1];
    echo = "Le prénom est $prenom et le nom $nom<br/>";
}

Comment extraire les valeurs d'un SELECT multiple ?
auteur : Cyberzoide
Il suffit de déclarer correctement son SELECT en HTML :
<select name="variable[]" multiple="multiple">
    <option value="x">xxx</option>
    ...
</select>
Puis de récupérer le tableau $variable dans le script d'arrivée :
foreach($variable as $elem) {
    echo $elem.'<br/>' ;
}

Comment mélanger un tableau de valeurs ?
auteur : Cyberzoide
Si les valeurs sont issues d'une requête MySQL, alors on peut utiliser la fonction RAND() au sein de la clause ORDER BY :
SELECT ...  FROM ... WHERE ... ORDER BY RAND()
Sinon, en PHP, la fonction shuffle() mélange les éléments du tableau. Attention à ne pas oublier d'initialiser le générateur de nombre aléatoire avec srand() :
srand(time()); 
shuffle($tab);

Comment travailler sur deux bases différentes dans le même script ?
auteur : Cyberzoide
Il est tout à fait possible d'ouvrir plusieurs connexions vers des bases de données distinctes au cours du même script. Pour cela, il faut ouvrir deux connexions distinctes vers le serveur, dont on garde précieusement les deux identifiants retournés par mysql_connect() :
$link1 = mysql_connect(...);
$link2 = mysql_connect(...);
Ensuite, il faut sélectionner les deux bases avec mysql_select_db() :
mysql_select_db($base1, $link1);
mysql_select_db($base2, $link2);
Et enfin exécuter les requêtes sur l'une ou l'autre des bases de données avec mysql_query(), en lui passant en paramètre l'identifiant de connexion adéquate :
mysql_query("SELECT ... FROM ... WHERE ...", $link1);
ou
mysql_query("SELECT ... FROM ... WHERE ...", $link2);
Cette méthode est recommendée dans les cas suivants :
  • utilisateurs (login et mot de passe) distincts avec des droits différents
  • connexion à deux serveurs différents
  • très nombreuses requêtes vers l'une et l'autres des bases

Dans le cas où le même utilisateur travaille sur deux bases différentes du même serveur avec les mêmes permissions (et le même login et mot de passe), la seule fonction mysql_select_db() permet d'éviter les connexions multiples au serveur.

Exemple :
mysql_select_db($base1);
mysql_query("SELECT ... FROM ... WHERE ...");
mysql_select_db($base2);
mysql_query("SELECT ... FROM ... WHERE ...");
...
mysql_select_db($base1);
mysql_query("SELECT ... FROM ... WHERE ...");
Si vous lancez de très nombreuses requêtes vers vos deux bases au cours de l'exécution de votre script, il peut s'avérer judicieux de préférer les connexions multiples et de travailler avec les identifiants de connexion plutôt que d'avoir à changer la base de données courante à tout bout de champ (avec les oublis et erreurs que cela peut impliquer).


Comment configurer et se connecter à interbase ?
auteur : giminik
En premier lieu, il faut d'abord copier le fichier gds32.dll fourni avec les sources php dans le dossier system32 de windows puis intégrer l'extension de php qui gère interbase. Dans le fichier de configuration php.ini modifiez la ligne : (suppression du point virgule)
;extension=php_interbase.dll
en
extension=php_interbase.dll
Sauvegardez puis redémarrez le serveur web pour que les modifications soient prises en compte.

Pour se connecter à la base, il faut utiliser la fonction ibase_connect($hote, $utilisateur, $motdepasse)$hote doit contenir l'adresse ip de la machine où se trouve le serveur interbase et le chemin complet du fichier de la base de cette même machine.

exemple :
le serveur interbase se trouve sur le poste ayant pour adresse ip : 172.16.2.63
le fichier contenant la base de données sur ce serveur est c:\mabase.gdb
l'utilisateur est SYSDBA et le mot de passe est masterkey
<?php
$hote = '172.16.2.63:c:\\mabase.gdb' ;
// le double \ est normal, cela sert à échapper les caractères spéciaux.
$user = 'SYSDBA' ;
$pass = 'masterkey' ;

$connexion = ibase_connect($hote, $user, $pass) ;
$requete = 'SELECT * FROM matable' ;
$result = ibase_query($connexion, $requete) ;
while ($ligne = ibase_fetch_object($result)) {
    echo $ligne->macolonne."<br />";
}
ibase_close($connexion);
?>

Comment se connecter et travailler sur une base access ?
auteur : djseb
1) Définir le driver ODBC associé à la base

Dans le cas d'un windows XP/2000 :
  • Panneau de configuration/outils d'administration/sources de données (ODBC)
  • Si Easyphp tourne en système, alors cliquer sur "source de données Système", sinon sur "source de données utilisateurs"
  • Cliquer sur ajouter
  • Choisir "Microsoft Acces Driver"
  • Donner un nom à la source de données.
  • Sélectionner l'adresse de la base de données
  • Si c'est une base de données distante, vous devez monter un lecteur reseau où se trouve la base de données

2) Se connecter a la base de données

Il faut utiliser la fonction odbc_connect :
$con=odbc_connect("nom du driver odbc","utilisateur","mot de passe");
3) Travailler sur la base de données
// on écrit la requête SQL
// les [] pour le nom de la tabale peuvent etres utiles
$requete="SELECT ... FROM [TABLE] WHERE ...";

// on envoie la requête
$resultats=odbc_exec($con,$requete)

// tant qu'il y a des résultats
while(odbc_fetch_array($valeurs))
{
        // on récupère ces résultats
        $valeur1 = odbc_result($valeurs,"champ1");
        $valeur2 = odbc_result($valeurs,"champ2");
}

Comment insérer un tableau (array) dans une table ?
auteur : Kerod
Pour insérer un tableau de style array dans une table, il faut utiliser la fonction serialize() qui retourne une chaîne contenant une représentation linéaire du tableau passé en paramètre, pour stockage.
Exemple :
$montableau = array("contenu1","contenu2","contenu3");
echo $tableau_lineaire = serialize($montableau); 
// Affiche a:3:{i:0;s:8:"contenu1";i:1;s:8:"contenu2";i:2;s:8:"contenu3";}
À Noter que cette fonction est utilisable qu'à partir de PHP 4.0.7, et qu'il n'est pas possible de linéariser les objets internes de PHP.
Pour récupérer ce tableau linéarisé, et retrouver le tableau de départ, il faut utilisez la fonction unserialize()
Exemple :
$montableau = unserialize($tableau_lineaire);

Comment faire pour demander à SQLServer d'interpréter les caractères spéciaux ?
auteur : Forum PHP
Dans le menu Démarrer, Groupe de programmes Microsoft SQL Server, lancer "Utilitaire Réseau client", et décocher "Conversion automatique ANSI vers OEM" dans l'onglet Options DB-Library. Ainsi les données sont renvoyées en ANSI.


precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2003  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com