La première chose à noter est qu'une connexion à la base de données est déjà établie, elle est présente sous la forme de l'objet $core->con. Le préfixe des tables SQL de Dotclear est accessible ainsi : $core->prefix.

Ces exemples sont des fonctions qui montrent comment afficher le résultat d'une requête simple lorsque le nombre de requêtes est peu important. Ces fonctions sont à utiliser dans un plugin par exemple.

Nous verrons dans un prochain billet comment utiliser $core->con en POO.

Requête simple sur un champ

On veut l’id d’un billet du blog au hasard :

function sql_result()
{
	global $core;
	$rs = $core->con->select("SELECT post_id FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 1;");
 
	echo($rs->f('post_id'));
}

Explications :

global $core;

Il est impératif de faire référence à $core pour accéder à $core->con, et ce pour toutes les fonctions.

$rs = $core->con->select("SELECT post_id FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 1;");

La requête est réalisée et $rs est le résultat de la requête.

echo($rs->f('post_id'));

On affiche le résultat : la colonne post_id.

Requête simple sur plusieurs champs

On veut l'id et le titre d'un billet du blog au hasard :

function sql_results()
{
	global $core;
	$rs = $core->con->select("SELECT post_id, post_title FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 1;");
 
	echo($rs->f('post_id').' '.$rs->f('post_title'));
}

Explications :

$rs = $core->con->select("SELECT post_id, post_title FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 1;");

$rs est un recordset, constitué de résultats.

echo($rs->f('post_id').' '.$rs->f('post_title'));

On affiche l'id du billet (la colonne post_id) et le titre du billet (la colonne post_title).

Requête sur plusieurs champs et plusieurs enregistrements

On veut l'id et le titre de 5 billets du blog au hasard :

function sql_more_results()
{
	global $core;
	$rs = $core->con->select("SELECT post_id, post_title FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 5;");
 
	while ($rs->fetch())
	{
		echo($rs->f('post_id').' '.$rs->f('post_title'));
	}
}

Explications :

$rs = $core->con->select("SELECT post_id, post_title FROM ".$core->prefix."post WHERE blog_id = '".$core->con->escape($core->blog->id)."' ORDER BY RAND() LIMIT 5;");

Le recordset $rs contient les id et titre de 5 billets.

while ($rs->fetch())

On crée une boucle avec le résultat de $rs.

echo($rs->f('post_id').' '.$rs->f('post_title'));

On affiche les 5 id et titres grâce à la boucle.

Modifications apportées :

  • 2007-06-27 : remplacement de
WHERE blog_id LIKE '".DC_BLOG_ID."'

par

WHERE blog_id = '".$core->con->escape($core->blog->id)."'
  • 14-11-2007

utilisation de RANDOM() avec PostgreSQL