Objectifs
Le tutoriel du système de DAO ne vous a pas plus ou vous voulez simplement faire vos requêtes complexes à la main ? Pas de problème, cette section est faite pour vous !
Requêtes de sélection
$arResults = CopixDB::getConnection ()->doQuery ('select champ1, champ2 from tableTest');
En résumé, on demande à CopixDB de nous fournir une connexion à la base de données par défaut, puis d'exécuter une requête de sélection.
Les résultats de la requête de sélection seront stockés dans un tableau ($arResults) d'objets ayant une propriété par champ. On peut ainsi afficher les valeurs de cette façon dans un template :
foreach ($arResults as $record){ echo $record->champ1, '-', $record->champ2, '<br />'; }
Requêtes de sélection paramétrées
Si vos requêtes disposent de paramètres, plutôt que de concaténer une chaine de caractères SQL, nous vous conseillons vivement d'utiliser le système de paramètres (évitant tout risque de SQLInjecton).
$arResults = CopixDB::getConnection ()->doQuery ('select champ1, champ2 from tableTest where champCritere=:valeurCritere', array (':valeurCritere'=>CopixRequest::get ('filtreUtilisateur'))); //exemple avec un LIKE $arResults = _doQuery ('SELECT idEleve AS id, nom, prenom1 AS prenom FROM eleve WHERE nom LIKE :vnom', array (':vnom'=>'debut%'));
Note _doQuery est une fonction raccourci de CopixDB::getConnection ()->doQuery ().
Pour indiquer un paramètre, comme vous le voyez, il suffit de nommer une variable :qqChose, sans l'entourer de guillemets (même pour une chaine de caractères). Ensuite, pour définir sa valeur à partir d'une variable PHP, il suffit de passer un tableau associatif avec
- clef = identifiant variable,
- valeur = valeur à affecter au paramètre.
Ici, comme nous utilisons un paramètre, il n'existe aucun risque de SQLInjection dans la requête, et vous pouvez ainsi utiliser la valeur donnée par l'internaute tranquillement.
Autres requêtes ?
Les requêtes de type update, delete, insert retournent le nombre d'enregistrements affectés par l'opération et non un tableau (à l'évidence).
Si la requête échoue ?
Si la requête est un échec, alors une exception de type CopixDBException est levée.
