Sajgak.ru

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Главная Joomla Работа с Базой Данных в Joomla 1.0. Различные методы.

Работа с Базой Данных в Joomla 1.0. Различные методы.

В Joomla 1.0 для работы с базой данных используется переменная $database. Исходники класса database лежат в /includes/database.php.

Обычно работа с Базой Данной состоит из двух этапов.

  1. Использование метода SetQuery, который берёт строку SQL запроса для дальнейшего её вычисления.
  2. Использование другого метода (например, 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 запроса для дальнейшего её вычисления.

Синтаксис: 

void setQuery ( sting $query [, integer $offset=0 [, integer $limit=0 [, string $prefix='#__' ]]] )
$query - строка SQL запроса.
$offset - Смещение для начала выбора. $limit - число запросов, которые нужно вернуть. Эти параметры аналогичны LIMIT [offset], rows в SQL. И означают что нужно вернуть только rows запросов (строк) начиная с позиции offset. Это используется, например, для постраничного вывода материалов.

Например, setQuery("SELECT name FROM $__users",5,10) вернёт 10 имён пользователей начиная с 5-го.

loadResult - возвращает первое поле первой строки запроса или false, если запрос неудачен. Используется, кода нам нужно получить только один результат.
Синтаксис:
mixed loadResult ( )

Пример приведён выше.

loadRow - возвращает первую строку запроса в виде массива или false, если запрос неудачен.

Синтаксис:

array loadRow ( )
Пример:
1
2
3
4
5
6
7
8
9
10
$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
7
$query = "SELECT * FROM #__users";
$database->setQuery( $query );
$rows = $database->loadObjectList();
//далее можно, например, пройтись и напечатать все имена
foreach ($rows as $row){
	echo $row->name;
}

 

 

loadResultArray  - Возвращает массив, каждый элемент которого - одно поле. Используется при выборе одной колонки.

Синтаксис:

array loadResultArray ( [ integer $num_in_array=0 ] )
$num_in_array - числовой offset поля строки базы данных.

Пример:

1
2
3
4
$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 - если нет.

Синтаксис:

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 - выдаёт сообщение о ошибке в стандартном формате. Оно включает в себя и номер ошибки, и её описание

Синтаксис:

string stderr ( [ boolean $showSQL=false ] )

$showSQL - показывать ли SQL.

getNumRows - возвращает число строк, возвращённое предыдущим запросом к базе данных. Или, если указан $resource - запросом, с указанным ресурсом

Синтаксис:

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-запрос выражения должны быть в кавычках, например в одинарных

$query = "INSERT INTO table (name) VALUES ('$name')";

 

 

2) использовать mosGetParam() для получения переменных, используемых в запросе. (mosGetParam автоматически применяет функцию addslashes, если это нужно)

 


Обновлено 08.01.2013 14:21  

Добавить комментарий


Защитный код
Обновить

Статьи и заметки о создании сайтов

Другие статьи и заметки

Разработка сайтов

Я окончил математико-механический факультет. Более 10 лет занимаюсь веб-программированием. На данный момент, в основном, пользуюсь CMS Wordpress и 1С-Битрикс. По поводу создания или доработок сайтов на этих и других CMS пишите мне:

Подробнее обо мне и о реализованных проектах

Рекомендую

Рекомендую всем хостинг 1gb.ru. Работает хорошо. Особенно радует техподдержка. Как-то раз они даже в мой PHP-код залезли и помогли решить проблему.

Кроме того, рекомендую всем хостинг Timeweb. Не очень мне нравится техподдержка (по сравнению с 1gb). А так же не рекомендую VDS на FreeBSD. Но, в остальном, всё работает замечательно. Замечательно подходит для больших проектов, особенно на Битриксе.