L'envoi d'une requête SQL à la base de données se fait avec une seule et unique fonction : mysqli_query().

On appelle cette fonction avec 2 paramètres :

- l'objet de connexion obtenu avec mysqli_connect() (plus précisément la référence sur cet objet),
- une requête SQL sous la forme d'une chaîne de caractères.

La requête peut être composée de n'importe quelle commande SQL, aussi bien de manipulation de données (SELECT, INSERT, UPDATE, DELETE) que de définition de données (CREATE, DROP, ALTER, etc).

Pour des raisons de sécurité évidentes, l'application Web ne fait jamais de requêtes de définition de données et elle travaille toujours par l'intermédiaire d'un utilisateur qui a des droits réduits sur l'accès à la base de données. Cet utilisateur peut uniquement faire des requêtes SELECT, INSERT, UPDATE, DELETE sur les tables. Il ne doit surtout pas avoir le droit de créer de nouvelles tables, de manipuler les structures des tables existantes, ou pire de les supprimer.

Si une erreur se produit au cours de la requête, mysqli_query() renvoie FALSE.

Si aucune d'erreur ne se produit mysqli_query() renvoie :

- un objet mysqli_result qui représente l'ensemble des résultats obtenus dans le cas d'une requête SELECT (même si aucun enregistrement n'a été selectionné).
- TRUE avec une requête INSERT, UPDATE ou DELETE.

traitement mysqli_query()

Les requêtes qui sont faites dans un site web dynamique sont à 90%-95% des requêtes SELECT. Il est donc recommandé de bien connaître les différentes clauses d'une telle requête (FROM, WHERE, ORDER BY, etc) et savoir faire des jointures entre différentes tables. dev.mysql.com/doc/refman/5.7/en/select.html

L'exemple suivant sélectionne quelques informations sur le livre numéro 5 de notre base de données.

Nous verrons plus loin et en détail comment on traite les résultats d'une requête SELECT. Ici on utilise simplement notre fonction infoTableau car les résultats sont retournés sous la forme d'un tableau associatif.

Exemple : sélectionner un livre
<?php ob_start(); require('bib_params.php'); require('bib_fonctions.php'); htmlDebut('Sélectionner un livre'); $bd = bdConnecter(); //-- Requête ---------------------------------------- $sql = 'SELECT liTitre, liAnnee, liPages, liPrix FROM livres WHERE liID = 5'; $r = mysqli_query($bd, $sql); //-- Traitement ------------------------------------- $enr = mysqli_fetch_assoc($r); infoTableau($enr); // Libération de la mémoire associée au résultat de la requête mysqli_free_result($r); //-- Déconnexion ------------------------------------ mysqli_close($bd); htmlFin(); ?>

Un autre exemple avec des jointures ...

Exemple : sélectionner un livre, son auteur et son éditeur
<?php ob_start(); require('bib_params.php'); require('bib_fonctions.php'); htmlDebut('Sélectionner un livre'); $bd = bdConnecter(); //-- Requête ---------------------------------------- $sql = 'SELECT liTitre, liAnnee, liPages, liPrix, auNom, auPrenom, edNom FROM livres, aut_livre, auteurs, editeurs WHERE liID = 15 AND al_IDLivre = liID AND auID = al_IDAuteur AND edID = liIDEditeur'; $r = mysqli_query($bd, $sql); //-- Traitement ------------------------------------- $enr = mysqli_fetch_assoc($r); infoTableau($enr); // Libération de la mémoire associée au résultat de la requête mysqli_free_result($r); //-- Déconnexion ------------------------------------ mysqli_close($bd); htmlFin(); ?>

Ecrivez des requêtes facilement lisibles.

Il faut profiter des facilités offertes par PHP dans la composition des chaînes de caractères littérales pour essayer de présenter les requêtes de manière aisément compréhensible.

Cette requête marche très bien :

$sql = 'select liTitre, liAnnee, liPages, liPrix, auNom, auPrenom, edNom from livres, aut_livre, auteurs, editeurs where liID = 15 and al_IDLivre = liID and auID = al_IDAuteur and edID = liIDEditeur';

Celle ci marche aussi très bien. En plus on comprend mieux ce qui se passe et plus rapidement :

    $sql = 'SELECT liTitre, liAnnee, liPages, liPrix,
    		auNom, auPrenom,
    		edNom
    	FROM livres,
    		aut_livre,
    		auteurs,
    		editeurs
    	WHERE liID = 15
    	AND al_IDLivre = liID
    	AND auID = al_IDAuteur
    	AND edID = liIDEditeur';