L2 Info : PHP et Programmation Web
 
◃  Ch. 8 PHP et SGBD : l'API PostgreSQL  ▹
 

Préparer puis exécuter une requête

  • Les requêtes récurentes ne méritent pas d'être analysées et planifiées systématiquement par le SGBD.
  • Le mécanisme de préparation permet d'éviter ce surplus de calcul.
  • Il permet également de rendre paramétrable les requêtes à l'aide de variables notées $i directement intégrés dans la chaîne de caractères mémorisant la requête SQL.
  • La réalisation de la requête se fait en deux temps :
    1. préparation de la requête avec pg_prepare([ resource $connection ], string $stmtname , string $query ): resource
    2. exécution avec pg_execute([ resource $connection ], string $stmtname , array $params ): resource
  • Exemple :
      $requete = 'SELECT * FROM departement WHERE nom LIKE $1 OR region LIKE $2';
      pg_prepare($ptrDB,'reqPrep1',$requete);
      $ptrQuery = pg_execute($ptrDB, 'reqPrep1', array('S%', '%Nor%'));
      if ($ptrQuery) {
        $resultat = pg_fetch_all($ptrQuery);
        foreach ($resultat as $ligne) {
          foreach ($ligne as $colonne)
            echo $colonne.',';
            echo "<br />\n";
          }
        }
      echo "<br />\n";
      $ptrQuery = pg_execute($ptrDB, 'reqPrep1', array('D%', '%oi%'));
      if ($ptrQuery) {
        $resultat = pg_fetch_all($ptrQuery);
        foreach ($resultat as $ligne) {
          foreach ($ligne as $colonne)
            echo $colonne.',';
          echo "<br />\n";
        }
      }
  • Exemple :
    27,Eure,582822,6040,Haute-Normandie,<br />
    50,Manche,497762,5938,Basse-Normandie,<br />
    59,Nord,2571940,5743,Nord-Pas-de-Calais,<br />
    61,Orne,292210,6103,Basse-Normandie,<br />
    62,Pas-de-Calais,1461257,6671,Nord-Pas-de-Calais,<br />
    71,Saône-et-Loire,554720,8575,Bourgogne,<br />
    72,Sarthe,561050,6206,Pays de Loire,<br />
    73,Savoie,411007,6028,Rhône-Alpes,<br />
    76,Seine-Maritime,1250120,6278,Haute-Normandie,<br />
    77,Seine-et-Marne,1313414,5915,Ile-de-France,<br />
    80,Somme,569775,6170,Picardie,<br />
    93,Seine-Saint-Denis,1515983,236,Ile-de-France,<br />
    <br />
    16,Charente,351563,5956,Poitou-Charentes,<br />
    17,Charente-Maritime,616607,6864,Poitou-Charentes,<br />
    24,Dordogne,412082,9060,Aquitaine,<br />
    25,Doubs,525276,5234,Franche-Comté,<br />
    26,Drôme,482984,6530,Rhône-Alpes,<br />
    44,Loire-Atlantique,1266358,6815,Pays de Loire,<br />
    49,Maine-et-Loire,780082,7166,Pays de Loire,<br />
    53,Mayenne,305147,5175,Pays de Loire,<br />
    58,Nièvre,220199,6817,Poitou-Charentes,<br />
    72,Sarthe,561050,6206,Pays de Loire,<br />
    79,Deux-Sèvres,366339,5999,Poitou-Charentes,<br />
    85,Vendée,626411,6720,Pays de Loire,<br />
    86,Vienne,426066,6990,Poitou-Charentes,<br />