Работа с базой данных в Joomla

Если используется MVC модель, то обратиться к объекту базы данных в классе модели можно так:

$this->_db 

или в общем случае:

$dbo =& JFactory::getDBO();

Здесь можно посмотреть список api функций для работы с базой данных.

Примеры работы с базой данных в Joomla.

Доступ к внешней базе данных:

<?php
$option = array(); //prevent problems 
$option['driver']   = 'mysql';            // Database driver name
$option['host']     = 'db.myhost.com';    // Database host name
$option['user']     = 'fredbloggs';       // User for database authentication
$option['password'] = 's9(39s£h[%dkFd';   // Password for database authentication
$option['database'] = 'bigdatabase';      // Database name
$option['prefix']   = 'abc_';             // Database prefix (may be empty)
$db = & JDatabase::getInstance( $option );
?>

Вот примеры наиболее, на мой взгляд, необходимых методов для работы с базой данных в Joomla:

1. array loadObjectList ( $key ) - Возвращает массив объектов типа stdClass. Каждый объект соответствует определенной записи в таблице БД.

$dbo =& JFactory::getDBO();
$query = "SELECT bid, name, clickurl FROM #__banner";
$dbo->setQuery( $query );
$row =& $dbo->loadObjectList();
print_r( $row );

2. object loadObject () - аналогично предыдущему примеру, только возращается один объект с полями таблицы

3. void loadResultArray ( $numinarray ) - возвращает одно поле из всех записей таблицы

4. mixed loadResult () - возвращает первое поле первой записи

5. mixed query() - выполняет заданную строку SQL

$dbo =& JFactory::getDBO();
$sql = "SELECT * FROM #__categories";
$dbo->setQuery( $sql );
if (!$result = $dbo->query()) {
echo $dbo->stderr();
}
echo $dbo->getNumRows( $result );

С помощью этого метода можно делать исполняемые запросы INSERT DELETE UPDATE

$database->setQuery("INSERT INTO #__table (name,value) VALUES ('имя','значение')");
$database->query();

Если в таблице было создано поле типа AUTO_INCREMENT, то получить идентификатор вновь созданного поля можно при помощи метода insertid, если вызвать его сразу после непосредственной вставки данных.

$dbo =& JFactory::getDBO();
$sql = 'INSERT INTO #__contact_details (name) VALUES("PEDRO")';
$dbo ->setQuery( $sql );
if (!$dbo->query()) {
echo $dbo->stderr();
} else {
echo $dbo->insertid();
}

Добавление строк в базу данных:

string getEscaped ( $text ) - экранирует символы для добавления в базу данных

string Quote ( $text ) - тоже что и getEscaped, только ещё строка обрамляется одинарными кавычками

 

$text = $database->Quote( "Joomla! is 'Power in Simplicity'!" );
$sql = "SELECT * FROM #__content WHERE introtext=$text";

Получаем:

 

SELECT * FROM jos_content WHERE introtext='Joomla! is \'Power in Simplicity\'!'