====== How to use the database classes in your script ======
Joomla provides a sopisticated database abstraction layer to simplify the usage for 3PD. This guide should help you using this layer.
=====1. Why should I use the Joomla database class?=====
Joomla is build to be able to use several different kinds of SQL-database-systems and to run in a variety of environments with different table-prefixes. In addition to these functions, the class automatically creates the database connection. Besides instantiating the object, you only need 2 lines of code to get a result from the database and that in a variety of formats. Using the Joomla database layer ensures a maximum of compatibility and flexibility for your extension.
=====2. Preparating the query=====
// Get a database object
$db = JFactory::getDBO();
$query = "SELECT * FROM #__example_table WHERE id = 999999";
$db->setQuery($query);
First we instantiate the database object, then we prepare the query. You can use the normal SQL-syntax, the only thing you have to change is the table-prefix. To make this as flexible as possible, Joomla uses a placeholder for the prefix, the %%#__%%. In the next step, the setQuery(), this string is replaced with the correct prefix.
Now, if we don't want to get information from the database, but insert a row into it, we need one more function. Every string-value in the SQL-syntax has to be quoted, therefore we have to hand over these values to the function $db->Quote($value).
Whatever we want to do, we have to set the query with the setQuery()-function. Although you could write the query directly as a parameter for setQuery(), its commonly done by first saving it in a variable, normally $query, and then handing this variable over. This helps writing clean, readable code.
=====3. Executing the Query=====
To execute the query, Joomla provides several functions, which differ in their return value.
==== Basic Query Execution ====
* query
==== Query Execution Information ====
* getAffectedRows
* explain
* insertid
==== Insert Query Execution ====
* insertObject
=====4. Query Results =====
The database class contains many methods for working with a query's result set.
==== Single Value Result ====
* loadResult
====Single Row Results ====
* loadObject
* loadRow
* loadResultArray
==== Multi-Row Results ====
* loadObjectList
* loadRowList
* loadAssocList
==== Misc Result Set Methods ====
* getNumRows
=====5. Tips, Tricks & FAQ=====
We had a few people lately using sub-queries like these:
SELECT * FROM #__example WHERE id IN (SELECT * FROM #__example2);
These kind of queries are only possible in MySQL 4.1 and above. Another way to achieve this, is splitting the query into two:
$query = "SELECT * FROM #__example2";
$database->setQuery($query);
$query = "SELECT * FROM #__example WHERE id IN (". implode(",", $database->loadArray()) .")";