Aller au contenu

Programmation PHP/MySQL

Un livre de Wikilivres.



PHP offre plusieurs fonctions d’interaction avec MySQL.

mysql_connect()

[modifier | modifier le wikicode]

Logo

La fonction mysql_connect() est obsolète en PHP7, et remplacée par la classe mysqli.

Exemple d'accès à une base de données MySQL
$user="BDDUSER";
$pass="BDDPASS";
$db="BDDNAME";
$table="demande_intervention";
$link=mysql_connect("localhost",$user,$pass); // Préproduction locale de BDDADRESSE
if (!$link)
die("Impossible de se connecter à mysql");
mysql_select_db($db,$link)
or die ("Impossible d'ouvrir $db :".mysql_error());
$query="insert into $table values($znom,$ztel,$znomach,zlieu,zdate)";
mysql_query($query,$link)
or die("Impossible d'ajouter des nouvelles données".mysql_error());
mysql_close($link);

Exécution d'une requête

[modifier | modifier le wikicode]

Maintenant que nous sommes connectés à notre base de données, il est possible d’exécuter des requêtes dessus. En voici un exemple

Exploiter une requête de type SELECT (avec mysql_fetch_assoc)
    $requete = "SELECT * FROM NOMTABLE";
    $res = mysql_query($requete);
    //On obtient alors tous les enregistrements présents dans la table nom table, et pour exploiter les enregistrements, on peut boucler de la manière        suivante :
    while ($enregistrement = mysql_fetch_assoc ($res) ) {
        $nom = $enregistrement['NOM'];
        $prenom = $enregistrement['PRENOM'];
        $adresse1 = $enregistrement['ADRESSE1'];
        $adresse2= $enregistrement['ADRESSE2'];
        $tel1 = $enregistrement['TEL1'];
        $tel2 = $enregistrement['TEL2'];
    }

De cette manière on récupère un tableau associatif sous la forme Clé->Valeur pour chacun des enregistrements retournés par la requête.

Il existe d'autres fonctions pour cela :

  • mysql_num_rows() : retourne le nombre de lignes données par la requête.
  • mysql_fetch_row() : identique à mysql_fetch_assoc mais retourne un tableau simple indice->valeur.
  • mysql_fetch_object() : identique à mysql_fetch_assoc mais retourne un objet.
  • mysql_fetch_array() : retourne les tableaux mysql_fetch_assoc() et mysql_fetch_row().

Exemple :

Exploiter une requête de type SELECT (avec mysql_fetch_object)
    $requete = "SELECT * FROM NOMTABLE";
    $res = mysql_query($requete);

    while ($enregistrement = mysql_fetch_object ($res) ) {
       $nom = $enregistrement->NOM;
       $prenom = $enregistrement->PRENOM;
       $adresse1 = $enregistrement->ADRESSE1;
       $adresse2= $enregistrement->ADRESSE2;
       $tel1 = $enregistrement->TEL1;
       $tel2 = $enregistrement->TEL2;
    }

Logo

Par défaut, mysql_fetch_array() renvoie deux tableaux imbriqués : le tableau itératif et l'associatif. Pour n'en sélectionner qu'un, il faut remplir son deuxième paramètre avec[1] :

  • MYSQL_ASSOC : pour le tableau associatif.
  • MYSQL_NUM : pour le tableau itératif.
  • MYSQL_BOTH : pour les deux (déjà par défaut).

Fermeture d'une connexion

[modifier | modifier le wikicode]
 //Ferme la connexion MySQL
 mysql_close ($ressource);

mysqli_connect()

[modifier | modifier le wikicode]

Cette fonction fonctionne un peu comme mysql_connect()[2] :

$link = mysqli_connect("BDDADRESSE","BDDUSER","BDDPASS","BDDNAME");
if (!$link) { die(mysqli_connect_errno()); }
mysqli_query($link, $query);
mysqli_close($link);

Les fonctions de manipulation de données ont pour préfixe "mysqli" avec les mêmes suffixes que celles du paragraphe précédent :

  • mysql_num_rows()
  • mysql_fetch_assoc()
  • mysql_fetch_row()
  • mysql_fetch_object()

La classe mysqli permet les mêmes opérations que les fonctions précédentes, avec l'avantage de la programmation objet en plus (ex : héritage, introspection...) :

$query = 'SELECT * FROM NOMTABLE';
$link = new mysqli("BDDADRESSE","BDDUSER","BDDPASS","BDDNAME");
if ($link->connect_error) {
    die(mysqli_connect_errno());
}
$result = $link->query($query);
while ($row = $result->fetch_assoc()) {
    var_dump($row);
}
$result->close();
$link->close();

query accepte les valeurs suivantes en second paramètre :

  • MYSQLI_STORE_RESULT : récupère tous les résultats du serveur (valeur par défaut).
  • MYSQLI_USE_RESULT : récupère ligne par ligne.
  • MYSQLI_ASYNC : requête SQL asynchrone (non bloquante).