Sådan laves databaseopslag og -forespørgsler i Joomla

Der er mange måder hvorpå man kan forbinde til databasen i Joomla, og dermed bruge tabellerne oprettet af Joomla eller lave sine egne i ens komponenter og moduler. Dog er der nogle sikkerheds- og kompabilitetsforhold der gør, at man bør benytte en standard-metode som beskrevet herunder.

// Første skridt for enhver forespørgselsrække: Opretter JDatabase-objektet.
$db = JFactory::getDbo();

// Optetter JDatabaseQuery-objektet til forespørgsler. ”true”-parameteren angiver at forespørgslen er tom.
$query = $db->getQuery(true);

// Nu kan man fastsætte selve forespørgslen. Først angives hvilken type forespørgsel man ønsker
$query->select( $collums );
$query->delete();
$query->insert( $tables );
$query->update( $tables );

// Herefter angives hvilke tabeller der arbejdes med
$query->from( $table );
$query->join( $type , $conditions );
$query->leftjoin( $conditions );
$query->rightjoin( $conditions );
$query->innerjoin( $conditions );
$query->outerjoin( $conditions );

// set kan bruges til insert-queries
$query->set( $conditions , $glue=',');

//where bruges til  at bestemme hvilke rækker der arbejdes med
$query->where( $conditions , $glue='AND')
$query->having( $conditions , $glue='AND');

// sorteringer:
$query->group( $columns );
$query->order( $collums );

// Forbered forespørgslen for database:
$db->setQuery($query);
// BEMÆRK: Intet er blevet udført endnu!

// For select-forespørgsler findes der flere forskellige måder at få resultatet retur på.
// Følgende er de mest anvendte:
$result = $db->loadObjectList();  //Returnerer et array med alle rækker, og kolonnerne som objekter.
$result = $db->loadObject();  // Returnerer første række, og kolonnerne som objekter.
$result = $db->loadResult();  //Returnerer kun første kolonne fra første række

// For forespørgsler der ikke skal returnere et resultat, kan følgende benyttes:
$db->query();

Dette er den sikre made at lave databaseopslag på i Joomla, uanset om systemet kører med en mySQL-database eller andre systemer. Man kan sagtens lave en forespørgsel direkte, f.eks. som en tekststreng i $query-variablen, men dette kan ikke anbefales, da det ikke er sikkert at forespørgslen vil fungere på alle Joomla-installationer.

Der er en række sikkerhedsaspekter som man også skal huske på i sine forespørgsler. Dette vil vi kigge på i et senere indlæg her på siden.

Forfatter: Lars Mogensen

Webudvikler hos Webitall