В Joomla 1.0 для работы с базой данных используется переменная $database. Исходники класса database лежат в /includes/database.php.
Обычно работа с Базой Данной состоит из двух этапов.
- Использование метода SetQuery, который берёт строку SQL запроса для дальнейшего её вычисления.
- Использование другого метода (например, loadResult) для выполнения запроса и возвращения его результа.
Небольшой пример из /includes/content.php (Получаем имя пользователя по его id):
1 2 3 4 5 6 |
$query = "SELECT name" . "\n FROM #__users" . "\n WHERE id = " . (int) $user_id ; $database->setQuery( $query); $creator = $database->loadResult(); |
Перейдём к описанию некоторых методов с примерами.
SetQuery — самый первый вызываемый метод. берёт строку SQL запроса для дальнейшего её вычисления.
Синтаксис:
1 |
void setQuery ( sting $query [, integer $offset=0 [, integer $limit=0 [, string $prefix='#__' ]]] ) |
Например, setQuery("SELECT name FROM $__users",5,10) вернёт 10 имён пользователей начиная с 5-го.
Синтаксис:
1 |
mixed loadResult ( ) |
Пример приведён выше.
loadRow — возвращает первую строку запроса в виде массива или false, если запрос неудачен.
Синтаксис:
1 |
array loadRow ( ) |
1 2 3 4 5 6 7 8 |
$query = "SELECT *" . "\n FROM #__users" . "\n WHERE id = " . (int) $user_id ; $database->setQuery( $query); $row = $database->loadRow(); //В $row теперь массив Можно получить, например, email следующим образом echo $row['3']; |
loadObjectList — возвращает массив, состоящий из строк таблицы (точнее — каждый элемент массива — экземпляр stdClass, поля которого совпадают с названиями полей в таблице)
Синтаксис:
1 |
array loadObjectList ( [ string $key ] ) |
Пример:
1 2 3 4 5 6 |
$query = "SELECT * FROM #__users"; $database->setQuery( $query ); $rows = $database->loadObjectList(); //далее можно, например, пройтись и напечатать все имена foreach ($rows as $row){ echo $row->name |
loadResultArray — Возвращает массив, каждый элемент которого — одно поле. Используется при выборе одной колонки.
Синтаксис:
1 |
array loadResultArray ( [ integer $num_in_array=0 ] ) |
$num_in_array — числовой offset поля строки базы данных.Пример:
1 2 3 |
$query = "SELECT email FROM #__users"; $database->setQuery( $query ); $rows = $database->loadResultArray(); |
Пример с использованием $num_in_array (выдаст массив имён пользователей)
1 2 3 |
$query = "SELECT id, name, email FROM #__users"; $database->setQuery( $query ); $rows = $database->loadResultArray(1); |
query — выполняет запрос. Используется, например, для запросов DELETE или UPDATE, где не надо выдавать результат. Возвращает database resource object если успешно, null — если нет.
Синтаксис:
1 |
object query () |
Пример (удаляем пользователя с id=5)
1 2 3 4 5 6 |
$query = "DELETE FROM #__users WHERE id=5"; $database->setQuery( $query ); if (!$database->query()) { //выдаём сообщение об ошибке если не удачный запрос echo "\n"; } |
После выполнения запроса можно получить информацию о том, как он был выполнен — успешно ли, сколько строк затронул. Если не успешно — можно получить сообщение об ошибке. Для этого используются следующие методы
getErrorNum — возвращает номер ошибки при последнем запросе к базе данных
getErrorMsg — возвращает описание ошибки
stderr — выдаёт сообщение о ошибке в стандартном формате. Оно включает в себя и номер ошибки, и её описание
Синтаксис:
1 |
string stderr ( [ boolean $showSQL=false ] ) |
$showSQL — показывать ли SQL.
getNumRows — возвращает число строк, возвращённое предыдущим запросом к базе данных. Или, если указан $resource — запросом, с указанным ресурсом
Синтаксис:
1 |
int getNumRows ( [ object $resource=null] ) |
$resource — database resource object. См. query();
Пример (число пользователей зарегестрированных на сайте — конечно, лучше использовать запрос SELECT count(*) FROM #__users):
1 2 3 4 5 6 |
$database->setQuery( "SELECT id FROM #__users" ); if (!$database->query()) { echo $database->stderr(); return false; } return $database->getNumRows(); |
getAffectedRows — возвраает число строк, которые были затронуты последним запросом. Например, SELECT, INSERT, UPDATE или DELETE.insertid — возвращает ID значение сгенерированное полем c AUTO_INCREMENT . Метод возвращает 0 если предыдущий запрос не сгенерировал AUTO_INCREMENT значение.
Безопасность при работе с базой данных.
Более подробно тут. Если кратко, то нужно обязательно следовать двум правилам:
1) все подставляемые в SQL-запрос выражения должны быть в кавычках, например в одинарных
2) использовать mosGetParam() для получения переменных, используемых в запросе. (mosGetParam автоматически применяет функцию addslashes, если это нужно)
Здравствуйте.
Скажите, где искать официальные описания этих функций? Это функции придуманные и прописанные в php файлах Джумлы?
Здравствуйте.
Это методы класса database. Их исходный код лежит в файле /includes/database.php
Описание класса и его методов можно найти по следующей ссылке: help.joomla.org/index.php?option=com_content&task=view&id=517&Itemid=60 (на англ. языке)
С Рождеством