Udt bdd

De Cms Made Simple France
Aller à : navigation, rechercher

Faire des requêtes SQL via une UDT

L'un des principaux intérêts d'utiliser une udt pour attaquer une base de donnée est évidement que vous bénéficiez de toute l'API de cmsmadesimple, y compris le code de connexion à votre base de donnée.

A partir de cet exemple

Voici un exemple de code qui pourrait fonctionner dans une page externe à tout système CmsMadeSimple

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head></head>
<body>
<font size="2" face="Arial">

<?php
// on se connecte à MySQL
$link = mysql_connect('localhost', 'root', 'mot_de_passe');

if (!$link) {
    die('Could not connect: ' . mysql_error());
};

mysql_select_db(ma_base);

// on crée la requête SQL
$sql = 'SELECT nom,prenom,email FROM `cms_module_monmodule_user` ORDER BY `nom`';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
?>
<table ALIGN="CENTER" BORDER="1">
<?php
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations de l'enregistrement en cours
?>

<tr><td>
    <?php echo '<b>'.$data['nom'].' </td><td> '.$data['prenom'].' </b></td><td> '.$data['email'].'</td><br>';
    }
?>
</td>
</tr>
</TABLE>
<CENTER>

<?php
// on ferme la connexion à mysql
mysql_close();
?>

</body>
</html>

Voici maintenant le cheminement nécessaire pour faire pareil dans CmsMadeSimple.

Voici l'équivalent dans l'UDT


//Je récupère le connecteur de la bdd
$db = cmsms()->GetDb();

// on crée la requête SQL, en s'assurant de se libérer du préfixe cms_ qui peut différer d'une installation à une autre
$sql = 'SELECT nom,prenom,email FROM `'.cms_db_prefix().'module_monmodule_user` ORDER BY `nom`';

//exécution de la requête et on teste le code retour
$dbretour = $db->Execute($sql);

if($dbretour === FALSE)
{  die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); }

A ce niveau on récupère toutes les données dans $dbretour. Reste maintenant à l'exploiter.

echo "<table>";
while ($row = $dbretour->FetchRow())
{
echo <<<REQUETE
<tr>
<td>{$row['nom']}</td>
<td>{$row['prenom']}</td>
<td>{$row['email']}</td>
</tr>
REQUETE;
}
echo "</table>";

Fini.

Pour ceux qui se posent la question : le <<<REQUETE et le REQUETE; sont une utilisation de ce qu'on appelle en php [la syntaxe heredoc]

Et avec un paramètre ?

On a vu dans les autres tuto que l'on pouvait appeler les UDT avec des paramètres.

Exemple {mon_udt prenom="Jean"} qui est récupérable dans mon udt sous la forme

$prenom = params['prenom'];

On peut donc utiliser ce paramètre pour améliorer les requêtes de notre exercice.


changer ces quelques lignes :

// on crée la requête SQL, en s'assurant de se libérer du préfixe cms_ qui peut différer d'une installation à une autre
$sql = 'SELECT nom,prenom,email FROM `'.cms_db_prefix().'module_monmodule_user` WHERE prenom = ? ORDER BY `nom`';

//Liste des paramètres (array)
$parametreSql = array();
$parametreSql[] = $params['prenom'];

//exécution de la requête et on test le code retour
$dbretour = $db->Execute($sql, $parametreSql);

Notez l'utilisation d'un point d'interrogation, c'est plus sécurisé que de faire Where prenom = '.$param["prenom"].'