Прямые запросы в базу данных Joomla (класс JDatabase)
Безопасная вставка данных
При работе с базами данных не стоит забывать про безопасность. Средством защиты является метод getEscaped()
1 |
$_REQUEST["sometext"] = "символы ' нужно экранировать"; $mytext = JRequest::getVar('sometext',''); $db =& JFactory::getDBO(); $mytext = $db->getEscaped($mytext); echo $mytext; |
Изменение используемой базы данных
Эта возможность полезна, когда нужно получить данные из базы данных, отличной от текущей.
1 |
$db =& JFactory::getDBO(); $database_name = "db_test2"; if ($db->select($database_name)) { //запросы к нужной базе данных } |
Отладка текущего запроса
Получения сообщения о последней ошибке:
1 |
$db = JFactory::getDBO(); $q = "SELECT * FROM real_content LIMIT 5"; $db->setQuery($q); $db->explain(); |
Проверка соединения с базой данных
1 |
$db =& JFactory::getDBO(); if (!$db->connected()) { echo "Нет соединения с сервером баз данных"; } else { echo "Все отлично, мы можем выполнять важные действия с базой данных"; } |
Получить количество обработанных строк в последнем запросе
1 |
$db=&JFactory::getDBO(); $sql = 'SELECT * FROM jos_content ORDER BY id ASC'; $db->setQuery($sql); //Выполним запрос $db->query(); echo $db->getAffectedRows (); |
Исполнение нескольких запросов
1 |
$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 |
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 |
$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 |
Array ( [0] => 1 [1] => Welcome to Joomla! ) |
Загружаем данные одной записи таблицы в объект
Мы можем получить объект свойствами которого будут поля записи.
1 |
$db =& JFactory::getDBO(); $query = 'SELECT * FROM jos_content ORDER BY id ASC LIMIT 1'; $db->setQuery($query); $row = $db->loadObject(); print_r($row); |
Получение ассоциативного списка записей
Иногда список объектов не очень удобен, гораздо удобнее работать с ассоциативным списком данных.
1 |
$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 |
$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); |