Прямые запросы в базу данных Joomla (класс JDatabase)

13.06.2012
Набор часто примеров для прямой работы с таблицами в CMS Joomla 2.5 и 3+

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

При работе с базами данных не стоит забывать про безопасность. Средством защиты является метод getEscaped()

1
2
3
4
5
$_REQUEST["sometext"] = "символы ' нужно экранировать";
$mytext = JRequest::getVar('sometext','');
$db =& JFactory::getDBO();
$mytext = $db->getEscaped($mytext);
echo $mytext;

Изменение используемой базы данных

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

1
2
3
4
5
6
$db =& JFactory::getDBO();
$database_name = "db_test2";
if ($db->select($database_name))
{
  //запросы к нужной базе данных
}

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

Получения сообщения о последней ошибке:

1
2
3
4
5
$db = JFactory::getDBO();
$q = "SELECT * FROM real_content LIMIT 5";
 
$db->setQuery($q);
$db->explain();

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

1
2
3
4
5
6
7
$db =& JFactory::getDBO();
if (!$db->connected()) {
    echo "Нет соединения с сервером баз данных";   
} else {
 
    echo "Все отлично, мы можем выполнять важные действия с базой данных";
}

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

1
2
3
4
5
6
7
8
9
10
$db=&JFactory::getDBO();
 
$sql = 'SELECT * FROM jos_content ORDER BY id ASC';
 
$db->setQuery($sql);
 
//Выполним запрос
$db->query();
 
echo $db->getAffectedRows ();

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

1
2
3
4
5
6
7
8
9
10
11
12
$db =& JFactory::getDBO();
 
$sql = '';
 
for ($i=0;$i<10;$i++)
{
  $sql .=" INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест$i', 'test$i') ; ";
}
 
$db->setQuery($sql);
 
$db->queryBatch();

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

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

1
2
3
4
5
6
7
8
9
10
11
db =& JFactory::getDBO();
 
$sql = " INSERT INTO `jos_content` (`title`, `introtext`) VALUES  ('Тест', 'test') ";
 
$db->setQuery($sql);
 
if(!$db->query())
{
  // Выводим ошибку, в случае если запрос не выполнился
  echo __LINE__.$db->stderr();
} 

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

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

1
2
3
4
5
6
7
8
9
$db=& JFactory::getDBO();
 
$q='SELECT id,title FROM jos_content ORDER BY id ASC LIMIT 1 ';
 
$db->setQuery($q);
 
$data_row = $db->loadRow();
 
print_r($data_row);

Результат:

1
2
3
4
5
Array
(
  [0] => 1
  [1] => Welcome to Joomla!
)

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

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

1
2
3
4
5
6
7
8
9
$db =& JFactory::getDBO();
 
$query = 'SELECT * FROM  jos_content ORDER BY id ASC  LIMIT 1';
 
$db->setQuery($query);
 
$row = $db->loadObject();
 
print_r($row);

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

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

1
2
3
4
5
6
7
8
9
10
$db =& JFactory::getDBO();
 
$query = 'SELECT id,title FROM jos_content ORDER BY id ASC LIMIT 10';
 
$db->setQuery($query);
 
//Выполним запрос и получим данные в качестве списка объектов
$data_rows_assoc_list = $db->loadAssocList();
 
print_r($data_rows_assoc_list);

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

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

1
2
3
4
5
6
7
8
$db=& JFactory::getDBO();
 
$db->setQuery('SELECT id,title FROM jos_content ORDER BY id ASC LIMIT 10');
 
// Выполним запрос и получим данные в качестве списка объектов
$data_object_list = $db->loadObjectList();
 
print_r($data_object_list);


Категории: CMS Joomla 1.5.X, CMS Joomla 2.5, Joomla
Яндекс.Метрика