RSS   Twitter   Copiny   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

 

JDatabase – прямые запросы в базу данных Joomla

с примерами запросов

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

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

$_REQUEST["sometext"] = "Безопасность превыше всего, всевозоможные апострофы - (') нужно экранировать   ";

$mytext = JRequest::getVar('sometext','');

$db =& JFactory::getDBO();

$mytext = $db->getEscaped($mytext);

echo $mytext;

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

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

$db =& JFactory::getDBO();

$database_name = "db2";

if ($db->select($database_name)) {

    //запросы к другой базе данных

}

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

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

$db =& JFactory::getDBO();

$q = "SELECT * FROM #__content LIMIT 5";

$db->setQuery($q);

$db->explain();


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

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

$db =& JFactory::getDBO();

if ($db->connected()) {

    echo "Нет соединения с сервером баз данных";    

    jexit();

} else {

    echo "Все отлично, мы можем выполнять важные действия с базой данных";

}


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

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

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

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

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

 

//для текущего пользвоателя

$user =& JFactory::getUser();

$user62 =& JFactory::getUser(62);

echo "ИД группы текущего пользователя:".$user->get( 'gid' );

echo "

ИД группы пользователя с ИД=62:".$user62->get('gid' );

if ($user->get( 'guest' )) {

    echo "

Пользователь проходимец или просто гость";    

}else {

    echo "

Пользователь зарегистрирован";        

    echo "

Дата последнего визита:".$user->get('lastvisitDate');

    echo "

Дата регистрации:".$user->get('registerDate');

    echo "

Имя пользователя/никнейм:".$user->get('name'). "/".$user->get('username');

    echo "

ID пользователя:".$user->get('id');

    echo "

Тип пользователя:".$user->get('usertype');

    echo "

email пользователя:".$user->get('email');

    echo "

MD5 хеш от пароля:".$user->get('password');

}


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

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

//1. Создадим экземпляр класса

$db=&JFactory::getDBO();

//2. Создадим запрос к базе данных, в данном случае мы выбираем статьи

$sql = 'SELECT id,title FROM jos_content ORDER BY id ASC  ';

//3. Установим этот запрос в экземпляр класса работы с базами данных

$db->setQuery($sql);

//4.  Выполним запрос 

$db->query(); 

//5. Посмотрим  сколько было задействовано   строк

echo $db->getAffectedRows ();

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

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

//1. Создадим экземпляр класса

$db =& JFactory::getDBO();

$sql = "";

//2. Создадим запросы к базе данных, в данном случае мы статью вне категорий 

for ($i=0;$i<10;$i++){

    $sql .=" INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест$i', 'test$i') ; ";

}

//3. Установим этот запрос в экземпляр класса работы с базами данных

$db->setQuery($sql);

//4.  Для того чтобы выполнить эти запросы будем использовать следующую конструкцию

$db->queryBatch();


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

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

//1. Создадим экземпляр класса

$db =& JFactory::getDBO();

//2. Создадим запрос к базе данных, в данном случае мы статью вне категорий

$sql = " INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест', 'test') ";

//3. Установим этот запрос в экземпляр класса работы с базами данных

$db->setQuery($sql);

//4.  Для того чтобы выполнить этот запрос будем использовать следующую конструкцию

if(!$db->query()){

    // 5. Выводим ошибку, в случае если запрос не выполнился

    echo __LINE__.$db->stderr();

} 

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

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

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

//1. Создадим экземпляр класса

$db=& 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 

print_r($data_row);


Результат:

Array

(

    [0] => 1

    [1] => Welcome to Joomla!

)

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

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

//1. Создадим экземпляр класса

$db =& JFactory::getDBO();

//2. Создадим запрос к базе данных, в данном  случае мы выбираем первую статью

$query='SELECT title FROM jos_content ORDER BY id ASC LIMIT 1 ';

//3. Установим этот запрос в экземпляр класса  работы с базами данных

$db->setQuery($query);

//4.  Выполним запрос и получим данные 

$datavalue = $db->loadResult(); 

//5. Посмотрим  что нам вернул этот метод,  это должна быть строка с заголовком первой статьи.

print_r($datavalue);


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

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

//1. Создадим экземпляр класса

$db =& 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

print_r($data_array);


Результат:

Array

(

    [0] => Welcome to Joomla!

)


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

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

//1. Создадим экземпляр класса

$db =& JFactory::getDBO();

//2. Создадим запрос к базе данных, в данном случае мы выбираем 1 статью

$query = 'SELECT * FROM  jos_content ORDER BY id ASC  LIMIT 1';

//3. Установим этот запрос в экземпляр класса работы с базами данных

$db->setQuery($query);

//4.  Выполним запрос 

$row = $db->loadObject(); 

//5. Посмотрим  что нам вернул этот метод

print_r($row);


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

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

//1. Создадим экземпляр класса

$db =& 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. Посмотрим  что нам вернул этот метод

print_r($data_rows_assoc_list);


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

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

//1. Создадим экземпляр класса

$db=& JFactory::getDBO();

//2. Создадим запрос к базе данных

$q = 'SHOW TABLES';

//3. Установим этот запрос в экземпляр класса работы с базами данных

$db->setQuery($q);

//4.  Выполним запрос и получим данные в качестве списка объектов

$data_object_list = $db->loadObjectList();

//5. Посмотрим какие таблицы у нас есть. Распечатав список

print_r($data_object_list);


Смотрите также:
Комментарии (3) Добавить комментарий
  • Юрий
    Юрий
    04 Июля 2011, 21:04
     ↑  +3  ↓     ответ

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

    • smet.denis
      smet.denis (админ)
      04 Июля 2011, 23:21
       ↑  -6  ↓     ответ

      А зачем вам проверять состояние подключения?

  • Юрий
    Юрий
    05 Июля 2011, 19:28
     ↑  +4  ↓     ответ

    у меня не работает команды обращения к базе данных, я проверил на самом простом примере (проверка связи) и это не работает. У меня вопрос в чем может быть проблема, если не одна команда не выполняется?

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.