MySQL - Sélectionner une requête

Le SQL SELECTLa commande est utilisée pour récupérer les données de la base de données MySQL. Vous pouvez utiliser cette commande à l'invite mysql> ainsi que dans n'importe quel script comme PHP.

Syntaxe

Voici la syntaxe SQL générique de la commande SELECT pour récupérer les données de la table MySQL -

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Vous pouvez utiliser une ou plusieurs tables séparées par des virgules pour inclure diverses conditions à l'aide d'une clause WHERE, mais la clause WHERE est une partie facultative de la commande SELECT.

  • Vous pouvez récupérer un ou plusieurs champs en une seule commande SELECT.

  • Vous pouvez spécifier une étoile (*) à la place des champs. Dans ce cas, SELECT retournera tous les champs.

  • Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.

  • Vous pouvez spécifier un décalage à l'aide de OFFSETd'où SELECT commencera à renvoyer les enregistrements. Par défaut, le décalage commence à zéro.

  • Vous pouvez limiter le nombre de retours en utilisant le LIMIT attribut.

Récupération de données à partir d'une invite de commande

Cela utilisera la commande SQL SELECT pour récupérer les données de la table MySQL tutorials_tbl.

Exemple

L'exemple suivant renvoie tous les enregistrements du tutorials_tbl table -

[email protected]# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

Récupérer des données à l'aide d'un script PHP

Vous pouvez utiliser la même commande SQL SELECT dans une fonction PHP mysql_query(). Cette fonction est utilisée pour exécuter la commande SQL puis plus tard une autre fonction PHPmysql_fetch_array()peut être utilisé pour récupérer toutes les données sélectionnées. Cette fonction renvoie la ligne sous forme de tableau associatif, de tableau numérique ou les deux. Cette fonction renvoie FALSE s'il n'y a plus de lignes.

Le programme suivant est un exemple simple qui montrera comment récupérer / afficher des enregistrements à partir du tutorials_tbl table.

Exemple

Le bloc de code suivant affichera tous les enregistrements de la table tutorials_tbl.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Le contenu des lignes est affecté à la variable $ row et les valeurs de cette ligne sont ensuite imprimées.

NOTE - N'oubliez jamais de mettre des accolades lorsque vous souhaitez insérer une valeur de tableau directement dans une chaîne.

Dans l'exemple ci-dessus, la constante MYSQL_ASSOC est utilisé comme deuxième argument de la fonction PHP mysql_fetch_array(), afin qu'il renvoie la ligne sous forme de tableau associatif. Avec un tableau associatif, vous pouvez accéder au champ en utilisant leur nom au lieu d'utiliser l'index.

PHP fournit une autre fonction appelée mysql_fetch_assoc(), qui renvoie également la ligne sous forme de tableau associatif.

Exemple

L'exemple suivant pour afficher tous les enregistrements de la table tutorial_tbl à l'aide de la fonction mysql_fetch_assoc ().

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_assoc($retval)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Vous pouvez également utiliser la constante MYSQL_NUMcomme deuxième argument de la fonction PHP mysql_fetch_array (). Cela obligera la fonction à renvoyer un tableau avec l'index numérique.

Exemple

Essayez l'exemple suivant pour afficher tous les enregistrements de la table tutorials_tbl à l'aide de l'argument MYSQL_NUM.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Tous les trois exemples ci-dessus produiront le même résultat.

Libérer la mémoire

Il est recommandé de libérer la mémoire du curseur à la fin de chaque instruction SELECT. Cela peut être fait en utilisant la fonction PHPmysql_free_result(). Le programme suivant est l'exemple pour montrer comment il doit être utilisé.

Exemple

Essayez l'exemple suivant -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   mysql_free_result($retval);
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Lors de la récupération des données, vous pouvez écrire un code aussi complexe que vous le souhaitez, mais la procédure restera la même que celle mentionnée ci-dessus.