Разрботка расширений для CMS Joomla
Шрифт:
где $query - это запрос, а $offset и $limit - соответственно смещение для начала выборки и количество выбираемых строк.
Например:
$db->setQuery($query, 0, 10);
Обратите внимание, что метод setQuery не выполняет запрос, а только задает его.
Выполнение запроса
Без выборки данных
Для выполнения запроса, не требующего выборки данных (например, UPDATE или INSERT), используется метод mixed query.
При успешном выполнении запроса метод возвращает указатель на его результат, в противном случае - false.
$db =& JFactory::getDBO; $query = "UPDATE #__users SET block = 0 WHERE username LIKE 'a%'"; $db->setQuery($query); $result = $db->query;
С выборкой данных
В классе JDatabase существуют методы для получения форматированного результата. Их можно разделить на следующие группы:
Получение одного значения: loadResult.
Получение одной строки таблицы: loadRow, loadAssoc, loadObject.
Получение одного столбца таблицы: loadResultArray.
Получение нескольких строк и нескольких столбцов: loadRowList, loadAssocList, loadObjectList.
Рассмотрим каждый из этих методов на примере таблицы #__categories, использующейся Joomla (таблица 2.1).
Таблица 2.1. Таблица #__categories id asset_id parent_id lft rgt level path extension … language1 0 0 0 11 0 system … * 2 27 1 1 2 1 uncategorised com_content … * 3 28 1 3 4 1 uncategorised com_banners … * 4 29 1 5 6 1 uncategorised com_contact … * 5 30 1 7 8 1 uncategorised com_newsfeeds … * 6 31 1 9 10 1 uncategorised com_weblinks … *
mixed loadResult
Метод загружает значение первого столбца первой строки результирующей выборки. Используется для получения из базы данных какого-либо одного значения. При ошибке выполнения запроса метод вернет null, как и все рассмотренные ниже методы выборки данных.
Например, получим значение поля name в записи под номером 2:
$db =& JFactory::getDbo; $query = 'SELECT '.$db->nameQuote('extension'). ' FROM '.$db->nameQuote('#__categories'). ' WHERE '.$db->nameQuote('id').'='.$db->Quote('2'); $db->setQuery($query); echo $db->loadResult;
Результатом выполнения данного запроса будет значение "com_content".
array loadRow
Загружает первую строку результирующей выборки в виде массива. Если запрос возвращает больше одной строки, то метод вернет первую из них.
$db =& JFactory::getDbo; $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadRow);
Результатом запроса будет следующий список (будем называть списком массив, индексами которого являются числа 0, 1, 2 и т.д.):
Array([0]=>1 [1]=>0 [2]=>0 [3]=>0 [4]=>11 [5]=>0 [6]=> [7]=>system [8]=>ROOT [9]=>root [10]=> [11]=> [12]=>1 [13]=>0 [14]=>0000-00-00 00:00:00 [15]=>1 [16]=>{} [17]=> [18]=> [19]=> [20]=>0 [21]=>2009-10-18 16:07:09 [22]=>0 [23]=>0000-00-00 00:00:00 [24]=>0 [25]=>*)
array loadAssoc
Метод загружает первую строку результирующей
$db =& JFactory::getDbo; $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadAssoc);
Результат запроса:
Array([id]=>1 [asset_id]=>0 [parent_id]=>0 [lft]=>0 [rgt]=>11 [level]=>0 [path]=> [extension]= >system [title]=>ROOT [alias]=>root [note]=> [description]=> [published]=>1 [checked_out]=>0 [checked_out_time]=>0000-00-00 00:00:00 [access]= >1 [params]=>{} [metadesc]=> [metakey]=> [metadata]=> [created_user_id]=>0 [created_time]=>2009-10-18 16:07:09 [modified_user_id]= >0 [modified_time]=>0000-00-00 00:00:00 [hits]=>0 [language]=>*)
object loadObject
Метод загружает первую строку результирующей выборки в виде объекта класса stdClass, причем его полями становятся названия полей таблицы. Если запрос возвращает больше одной строки, то метод вернет первую из них.
$db =& JFactory::getDbo; $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadObject);
Результат запроса:
stdClass Object([id]=>1 [asset_id]=>0 [parent_id]=>0 [lft]=>0 [rgt]=>11 [level]= >0 [path]=> [extension]=>system [title]=>ROOT [alias]=>root [note]=> [description]=> [published]=>1 [checked_out]=>0 [checked_out_time]=>0000-00-00 00:00:00 [access]= >1 [params]=>{} [metadesc]=> [metakey]=> [metadata]=> [created_user_id]=>0 [created_time]=>2009-10-18 16:07:09 [modified_user_id]=>0 [modified_time]= >0000-00-00 00:00:00 [hits]=>0 [language]=>*)
array loadResultArray(int numinarray=0)
Метод загружает массив значений из результирующей выборки, полученных из одного столбца. Параметр numinarray используется для указания того, какой столбец нужно вернуть.
$db =& JFactory::getDbo; $query = 'SELECT '.$db->nameQuote('extension'). ' FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadResultArray);
Результатом будет следующий список:
Array([0]=>com_banners [1]=>com_contact [2]=>com_content [3]=>com_newsfeeds [4]=>com_weblinks [5]=>system)
Данный метод позволяет перебирать в цикле столбцы таблицы:
$db =& JFactory::getDbo; $query = 'SELECT '.$db->nameQuote('path').','.$db->nameQuote('extension').','.$db->nameQuote('language'). ' FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); for ($i = 0; $i <= 2; $i++) { $column = $db->loadResultArray($i); print_r($column); echo "<br>"; }
В результате на экран будет выведено:
Array([0]=> [1]=>uncategorised [2]=>uncategorised [3]= >uncategorised [4]=>uncategorised [5]=>uncategorised) Array([0]=>system [1]=>com_content [2]=>com_banners [3]= >com_contact [4]=>com_newsfeeds [5]=>com_weblinks) Array([0]=>* [1]=>* [2]=>* [3]=>* [4]=>* [5]=>*)