PHP - MySQL [Retour au menu]
Interface PHP / MySQL

Connexion et déconnexion d'une base de données, gestion des erreurs avec @ et die, écriture de nouveaux enregistrements, comptage d'enregistrements, affichage du résultat d'une requête

Il existe plusieurs possibilités de connexion aux base de données.

<?
// Syntaxe correcte pour PHP 5.6 :
$BaseMichel = new mysqli("localhost", "NomUtilisateur", "MotDePasse", "NomBaseDeDonnées");
$BaseMichel->query("INSERT INTO T_Client(NomClient) VALUES ('Durand')");
$Resultat = $BaseMichel->query("SELECT NomClient FROM T_Client");
$Resultat->data_seek(0);
while ($LigneActuelle = $Resultat->fetch_assoc())
{
echo $LigneActuelle['NomClient'] . "<br/>";
}
$BaseMichel->close();
?>

<?
  mysql_connect("localhost", "info3000", "MonMotDePasse");
  mysql_close();
?>

 

Liste exhaustive des instructions MySQL via PHP

Exemple simple : Connexion et déconnextion

Ouverture et fermeture d'une session de connexion chez Infomaniak

<?
  mysql_connect("localhost", "info3000", "MonMotDePasse");
  mysql_close();
?>

Gestion des cas d'erreur de connection avec @ et die

@mysql_connect("localhost", "info3000", "MonMotDePasse") or die("Impossible de se connecter à la base de données");

Le fait de commencer la ligne par @ permet d'écrire or die quelque chose... C'est à dire qu'en cas d'erreur sur cette ligne, au lieu d'avoir le message d'erreur PHP généralement incompréhensible pour les novices, on a plutôt une phrase qui s'affiche à l'écran plus sympathique : "Impossible de se connecter à la base de données". Ensuite, la procédure PHP s'arrête net (les lignes suivantes de PHP ne sont pas exécutées)

Connexion avec la base de données info3000

mysql_connect("localhost", "info3000", "MonMotDePasse");
mysql_select_db("info3000");
mysql_close();

Insertion de nouvelles données dans une table

Soit la table :

CREATE TABLE T_Copain
 
(
  NomCopain  varchar(30),
  Prenom     varchar(20),
  Profession varchar (30)
  );

Pour ajouter Jean-Louis Moretton, Maçon, il va falloir exécuter la requête :
INSERT INTO T_Copain VALUES('Moretton','Jean-Louis','Maçon');

Dans une instruction PHP, comme ceci :
mysql_connect("localhost", "info3000", "MonMotDePasse");
mysql_select_db("info3000");
mysql_query("INSERT INTO T_Copain VALUES('Moretton','Jean-Louis','Maçon');");
mysql_close();

Lecture et affichage des données depuis une requête

Soit la même table qui contient les données suivantes (On a effacé Moretton) :

mysql_query("INSERT INTO T_Copain VALUES('Van Gogh','Vincent','Peintre');");
mysql_query("INSERT INTO T_Copain VALUES('Colucci', 'Michel', 'Comique');");
mysql_query("INSERT INTO T_Copain VALUES('Goya',    'Chantal','Chanteuse');");
mysql_query("INSERT INTO T_Copain VALUES('Picasso', 'Pablo',  'Peintre');");

Il s'agit d'afficher ces données.

$Resultat = mysql_query("SELECT * FROM T_Copain;");

$Resultat ne va pas contenir directement le résultat, mais c'est un pointeur VERS les données résultantes. D'ailleurs, si on demande à l'afficher, il va simplement répondre Resource id #2: C'est normal car, quelque part, on ignore le nombre de champs et d'enregistrements à retourner. Il va falloir utiliser d'autres fonctions prévues pour extraires ces fameuses données :

On constate qu'il s'agisse d'une requête "Active", telle qu'un INSERT INTO, ou d'une requête "passive" (SELECT), dans les 2 cas, c'est l'instruction mysql_query qui est utilisée.Simplement, dans le cas d'une requête "active", il n'est pas besoin d'assigner le résultat dans une variable $Machin = mysql_query("INSERT INTO... Encore que ce serait possible, mais $Machin contiendrait juste 1 comme quoi ça c'est bien déroulé (je suppose que c'est ce que veut dire le 1). Par contre, pour les requêtes SELECT, il faut bien voir le résultat, alors dans ce cas on utilise une variable $Machin = mysql_query("SELECT...

Comptage du nombre d'enregistrements

La fonction mysql_numrows renvoie le nombre d'enregistrements de la requête

echo mysql_numrows($Resultat);

Affichage des enregistrements proprement dit

Le code suivant affiche le NomCopain du premier enregistrement (Colucci). (Les enregistrements sont comptés depuis 0)

$Resultat = mysql_query("SELECT * FROM T_Copain ORDER BY NomCopain;");
echo mysql_result($Resultat , 0 , "NomCopain");

mysql_result possède 3 paramètres :

  1. $Resultat : Variable résultant de la requête mysql_query
  2. 0 : Premier enregistrement de la requête
  3. "NomCopain" : Nom du champ désiré

Il ne faut pas aller au delà du nombre maximum d'enregistrements. Aussi, comme ils sont numérotés à partir de 0, c'est le 3 qui est le plus grand :

echo mysql_result($Resultat , 4 , "NomCopain");

Renvoie une erreur de type :
Warning: Unable to jump to row 4 on MySQL result

Affichage de tous les champs de tous les enregistrements

Un simple for suffit : Dans la partie $Compteur<mysql_numrows($Resultat), on écrit bien < et pas <=, parce que je rappelle que les enregistrements sont comptés à partir de 0, donc, il faut compteur de 0 à 3 et pas 4, d'ou le <, qui s'arrêtera a 3..

for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
  {
  echo mysql_result($Resultat , $Compteur , "NomCopain");
  }

Affichons maintenant les 3 champs : Si nous les assignons à des variables, l'echo sera plus simple à écrire et à comprendre :

for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
  {
  $NomCopain  = mysql_result($Resultat , $Compteur , "NomCopain" );
  $Prenom     = mysql_result($Resultat , $Compteur , "Prenom"    );
  $Profession = mysql_result($Resultat , $Compteur , "Profession");
  echo $Prenom , " " , $NomCopain , " (" , $Profession , ")<BR>";
}

Et voici le code complet :

<?
  // Séquence d'initialisation :
  // =========================

  mysql_connect("localhost", "info3000", "MonMotDePasse");
  mysql_select_db("info3000");

  // Corps :
  // =====

  $Resultat = mysql_query("SELECT * FROM T_Copain ORDER BY NomCopain;");
  
for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
    {
    $NomCopain = mysql_result($Resultat , $Compteur , "NomCopain");
    $Prenom = mysql_result($Resultat , $Compteur , "Prenom");
    $Profession = mysql_result($Resultat , $Compteur , "Profession");
    echo $Prenom , " " , $NomCopain , " (" , $Profession , ")<BR>";
    }

  // Fin :
  // ===

  mysql_close();
?>

---