Содержание материала

* В примерах замените & на символ &


Безопасная вставка данных

Главное при работе с базой данных - это безопасность, поэтому предохраняйтесь от случайных данных. Таким средством является метод getEscaped();

<?php
 $_REQUEST["sometext"]="Безопасность превыше всего, всевозоможные апострофы - (') нужно экранировать   ";
 $mytext=JRequest::getVar('sometext','');
 $db=&amp;JFactory::getDBO();
 $mytext=$db->getEscaped($mytext);
 echo $mytext;
?>


Установка используемой базы данных

Эта возможность полезна, когда нужно получить данные из базы данных, отличной от текущей. Однако нужно заметить, чтобы этот метод был выполнен успешно, нужно, чтобы пользователь mysql установленный в настройках Джумла имел право работать с обеими базами данных.

<?php
$db=&amp;JFactory::getDBO();
$database_name="db2";
if ($db->select($database_name)) {
 //запросы к другой базе данных
}
?>   


Отладка текущего запроса

От ошибок не застрахован никто, поэтому полезно иногда посмотреть что возвращает ваш запрос. И для этого не обязательно копировать его и вставлять в phpmyadmin.

<?php
$db=&amp;JFactory::getDBO();
$q="SELECT * FROM #__content LIMIT 5";
$db->setQuery($q);
$db->explain();
?>  


Проверка соединения с базой данных

Иногда полезно знать, что сервер mysql не "упал" и соединение с ним работает. Например перед тем как обновить данные в базе об оплате счета и т.п.

<?php
$db=&amp;JFactory::getDBO();
if ($db->connected()) {
 echo "Нет соединения с сервером баз данных";   
die();
} else {
 echo "Все отлично, мы можем выполнять важные действия с базой данных";
}
?>   


Получение данных о пользователе

Работа с записью пользователя Joomla 1.5.x получение данных о пользователе

Частенько приходится отделять зерна от плевел. Как это сделать в Джумла? - Очень просто – назначить группы. А как же узнать к какой группе принадлежит пользователь, конечно же по идентификатору группы.

Вот табличка соответвия стандартных групп Джумла.

Идентификатор
Название Группы
18
Зарегистрированные пользователи
19
Автор
20
Редактор
21
Публикатор
23
Менеджер
24
Администратор
25
Супер администратор

<?php
//для текущего пользвоателя
$current_user =&amp; JFactory::getUser();
// для пользователя с заданным ID
$user62=&amp; JFactory::getUser(62);
//получим группу пользвоателя текущего и с ID=62
echo "ИД группы текущего пользователя:".$user->get( 'gid' );
echo "<br/>ИД группы пользователя с ИД=62:".$user62->get('gid' );
//если нужно узнать зарегистрированный пользвоатель или нет, то можно просто обратится
if ($user->get( 'guest' )) {
echo "<br/>Пользователь проходимец или просто гость";    
}else {
echo "<br/>Пользователь зарегистрирован";        
//если нужно узнать дату последнего визита
echo "<br/>Дата последнего визита:".$user->get('lastvisitDate');
//если нужно узнать дату регистрации
echo "<br/>Дата регистрации:".$user->get('registerDate');
//если нужно узнать имя   пользователя/никнейм
echo "<br/>Имя пользователя/никнейм:".$user->get('name'). "/".$user->get('username');
//если нужно узнать ID пользователя
echo "<br/>ID пользователя:".$user->get('id');
//если нужно узнать тип пользователя (не путать с группой пользователя)
echo "<br/>Тип пользователя:".$user->get('usertype');
//если нужно узнать email
echo "<br/>email пользователя:".$user->get('email');
//если нужно узнать MD5 хеш от пароля
echo "<br/>MD5 хеш от пароля:".$user->get('password');
}
?>  


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

Показывает сколько строк было задействовано в ходе выполнения запроса.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы выбираем статьи
$q='SELECT id,title FROM jos_content ORDER BY id ASC  ';
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($q);
//4.  Выполним запрос
$db->query();
//5. Посмотрим  сколько было задействовано   строк
echo $db->getAffectedRows ();
?> 


Исполнение нескольких запросов

В основном следующая конструкция используется при установке или удалении данных о компоненте в базе данных

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
$q="";
//2. Создадим запросы к базе данных, в данном случае мы статью вне категорий
for ($i=0;$i<10;$i++){
$q.=" INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест$i', 'test$i') ; ";
}
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($q);
//4.  Для того чтобы выполнить эти запросы будем использовать следующую конструкцию
$db->queryBatch();
?>  


Выполнение запросов

В основном следующая конструкция используется для выполнения запроса INSERT,UPDATE,DELETE.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы статью вне категорий
$q=" INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест', 'test') ";
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($q);
//4.  Для того чтобы выполнить этот запрос будем использовать следующую конструкцию
if(!$db->query()){
// 5. Выводим ошибку, в случае если запрос не выполнился
echo __LINE__.$db->stderr();
}
?>

После этого в менеджере статей вы можете увидеть эту статью.


Получаем результат запроса из базы в виде неассоциативного массива

Фактически результат функции php - mysql_fetch_row.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы выбираем первую статью
$q='SELECT id,title FROM jos_content ORDER BY id ASC LIMIT 1 ';
//3. Установим этот запрос в экземпляр класса  работы с базами данных
$db->setQuery($q);
//4.  Выполним запрос и получим данные
$data_row=$db->loadRow();
//5. Посмотрим  что нам вернул этот метод, должен быть массив из 2-х элементов id и  title
echo '<pre>';
print_r($data_row);
echo '</pre>';
?>

Результат:

Array
(
[0] => 1
[1] => Welcome to Joomla!
)

Получаем единичное значение из базы

Иногда нужно просто получить одно значение из базы.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном  случае мы выбираем первую статью
$query='SELECT title FROM jos_content ORDER BY id ASC LIMIT 1 ';
//3. Установим этот запрос в экземпляр класса  работы с базами данных
$db->setQuery($query);
//4.  Выполним запрос и получим данные
$datavalue=$db->loadResult();
//5. Посмотрим  что нам вернул этот метод,  это должна быть строка с заголовком первой статьи.
echo '<pre>';
print_r($datavalue);
echo '</pre>';
?>


Загружаем данные одной записи таблицы в массив

Мы можем получить массив элементами которого будут поля записи.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы выбираем первую статью
$q='SELECT title FROM jos_content ORDER BY id ASC LIMIT 1 ';
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($q);
//4.  Выполним запрос и получим данные
$data_array=$db->loadResultArray();
//5. Посмотрим  что нам вернул этот метод,  должен быть массив с элементами id и  title
echo '<pre>';
print_r($data_array);
echo '</pre>';
?>

Результат:

Array
(
[0] => Welcome to Joomla!
)

Загружаем данные одной записи таблицы в объект

Мы можем получить объект свойствами которого будут поля записи.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы выбираем 1 статью
$query='SELECT * FROM  jos_content ORDER BY id ASC  LIMIT 1';
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($query);
//4.  Выполним запрос
$row = $db->loadObject();
//5. Посмотрим  что нам вернул этот метод
echo '<pre>';
print_r($row);
echo '</pre>';
?>


Получение ассоциативного списка записей

Иногда список объектов не очень удобен, гораздо удобнее работать с ассоциативным списком данных.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных, в данном случае мы выбираем только первые 10 статей
$query='SELECT id,title FROM jos_content ORDER BY id ASC LIMIT 10 ';
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($query);
//4.  Выполним запрос и получим данные в качестве списка объектов
$data_rows_assoc_list=$db->loadAssocList();
//5. Посмотрим  что нам вернул этот метод
echo '<pre>';
print_r($data_rows_assoc_list);
echo '</pre>';
?>


Получение списка объектов

Многие, кто пишет расширения для Joomla сталкивается с тем что нужно выполнить запрос к базе данных для получения или вставки данных. Попробуем получить простейший список объектов.

<?php
//1. Создадим экземпляр класса
$db=&amp;JFactory::getDBO();
//2. Создадим запрос к базе данных
$q='SHOW TABLES';
//3. Установим этот запрос в экземпляр класса работы с базами данных
$db->setQuery($q);
//4.  Выполним запрос и получим данные в качестве списка объектов
$data_object_list=$db->loadObjectList();
//5. Посмотрим какие таблицы у нас есть. Распечатав список
echo '<pre>';
print_r($data_object_list);
echo '</pre>';
?>  


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

Комментарии  

-1 #1 @ 15.09.2011 05:19
:sigh: :zzz :-?
-1 #2 Андрей 21.11.2011 03:54
Если $db->connected()== false то мы соединены с базой, что-то я сомнениваюсь
-1 #3 adminv15 21.11.2011 07:26
и где вы это тут нашли?

You have no rights to post comments