PHP/Base de données

Une page de Wikiversité.

< PHP
Computer-aj aj ashton 01.svg

PHP/Base de données est une ébauche concernant l'informatique. Vous pouvez aider le projet Wikiversité en l'améliorant.


Base de données
Computer-aj aj ashton 01.svg
Chapitre 7
Leçon : PHP
Chap. préc. : Classes
Chap. suiv. : Formulaire
Icon falscher Titel.svg

En raison de limitations techniques, la typographie souhaitable du titre, « PHP : Base de données
PHP/Base de données
 », n'a pu être restituée correctement ci-dessus.

Sommaire

[modifier] PHP et les bases de données

Un des grands points forts de PHP est la simplicité avec laquelle il permet d'accéder à de multiples sortes de bases de données. Le couple le plus connu est certainement PHP/MySQL, cependant il existe des extensions pour plus d'une cinquantaine d'autre base de données tel que: ODBC, Oracle, MS SQL, FrontBase, Sybase, Informix, PostgresSQL, Berkeley, ...

Nous allons ici traiter plus particulièrement de MySQL. Dans toute la suite, nous utiliserons l'abréviation BDD pour « base de données ».

[modifier] PHP et MySQL

MySQL (My Structured Query Language) est un type de BDD très répandu sur Internet car très simple d'utilisation et compatible avec la grande majorité des scripts PHP disponibles en téléchargement libre sur le Net (OsCommerce, phpBB, Joomla...). Elle répond au langage SQL (Structured Query Language).

Il existe des interfaces graphiques permettant la gestion en ligne d'une BDD MySQL comme le plus connu PHPMyAdmin ou encore Eskuel. Ces interfaces permettent à l'utilisateur de la BDD de voir et de modifier celle-ci comme il le souhaite (création de tables, modification et suppression des données...) sans avoir à connaitre le langage SQL permettant de manipuler la base.

[modifier] Connexion à MySQL

Pour des raisons de sécurité il est fortement conseillé de créer un fichier externe et d'y déposer vos identifiants de connexion à votre BDD (fourni par votre hébergeur dans la plupart des cas).

Évitez aussi de nommer ce fichier d'une manière trop attirante (pas de « identifiants_bdd.php »...).

Il est aussi conseillé de donner une extension « .php » à ces fichiers afin que leur contenu ne soit pas affiché en cas de mauvaise manipulation (par exemple un fichier « bdd.ini » ne sera interprété si son adresse est tapée directement dans un navigateur et vos identifiants apparaitront en clair).

config.php

$sql_host = 'localhost';
$sql_user = 'login';
$sql_password = 'password';
$sql_database = 'my_db';

Il faut ensuite inclure cette page dans toutes les pages où vous aurez besoin de vous connecter à votre BDD. Pour vous connecter, il vous suffira alors de procéder ainsi :

include ('./config.php');
 
$connect = mysql_connect($sql_host, $sql_user, $sql_password) or die ("Impossible de se connecter à MySQL");
mysql_select_db($sql_database, $connect) or die ("Impossible de sélectionner la base ".$sql_database);
 
// ... votre script
 
mysql_close($connect);

[modifier] Requête SQL

Une fois la connexion à votre BDD ouverte, vous pouvez travailler dessus et lancer les requêtes que vous souhaiter. En anglais, requête se dit query, nous allons utiliser la fonction mysql_query de php.

// ... connexion
 
$sql = "DELETE FROM ma_table WHERE colonne = '1' LIMIT 0,30";
if (!mysql_query($sql, $connect))
{
  die (mysql_error());
}
 
// ... deconnexion

[modifier] Récupération des données d'une BDD MySQL

// ... connexion
 
$sql = "SELECT ville, pays, code_postal FROM table_clients WHERE code_postal = '78000' AND client_id = '44' LIMIT 1";
if (!$result = mysql_query($sql, $connect))
{
  die (mysql_error());
}
$client_data = mysql_fetch_array($result);
extract($client_data);
 
echo $ville;
echo $pays;
echo $code_postal;
 
// ... deconnexion

[modifier] De l'utilité des tableaux associatifs

La ressource pointant sur les résultats d'une requête nous permet d'accéder de manière très simple à ces données en utilisant la syntaxe des tableaux indexés.

// ... connexion
 
//-- récupération de 2 champs : 'maladie' et 'ville'
$sql = "SELECT SUM(cas_Paludisme) as 'maladie', ville 
        FROM tbl_enquete, tbl_ville 
        WHERE tbl_enquete.ID_ville = tbl_ville.ID_ville 
        GROUP BY ville";
 
if (!$resultat = mysql_query($sql, $connect))
{
  die (mysql_error());
}
 
//--- lecture des données pointées (version 1)
//--- L'option MYSQL_FETCH_ASSOC permet la réupération d'un tableau associatif
while($ligne_table = mysql_fetch_array($resultat, MYSQL_FETCH_ASSOC))
{
   //-- syntaxe du tableau associatif
   echo $ligne_table['ville']." a ".$ligne_table['maladie']." cas <br />\n";
}
 
//--- lecture des données pointées (version 2)
while($ligne_table = mysql_fetch_array($resultat, MYSQL_FETCH_ASSOC))
{
   echo "Nombre de cas et localisation : ";
   //-- lecture d'un tableau associatif
   foreach ($ligne_table as $clef=>$valeur)
   {
      echo $valeur." ";
   }
   echo "<br />\n";
}

[modifier] Compter le nombre de lignes d'un résultat

$resultat = mysql_num_rows("Requête SQL")

[modifier] Compter le nombre de champs d'un résultat

$resultat = mysql_num_fields("Requête SQL")

[modifier] Lister les bases de données d'un serveur

$resultat = mysql_list_dbs($connect)
while ($ligne = mysql_fetch_array($resultat)) {
printf("%s<br>",$ligne["BDD"]); }

[modifier] Lister les tables

$resultat = mysql_list_tables("BDD", $connect)
while ($ligne = mysql_fetch_array($resultat)) {
printf("%s<br>",$ligne["tables"]); }

[modifier] Lister les champs

$resultat = mysql_list_fields("BDD", "Table", $connect)
while ($ligne = mysql_fetch_array($resultat)) {
printf("%s<br>",$ligne["champs"]); }

[modifier] Lister l'ID de la dernière ligne insérée.

$resultat = mysql_query(INSERT INTO table VALUES(...)");
$id = mysql_insert_id();
PHP
Crystal Clear action back.png Classes