Как я могу распечатать запрос Joomla?

14

Предположим, вы создали запрос с помощью Joomla.

// Get a db connection.
$db = JFactory::getDbo();

// Create a new query object.
$query = $db->getQuery(true);

// Select all records from the user profile table where key begins with "custom.".
// Order it by the ordering field.
$query->select($db->quoteName(array('user_id', 'profile_key', 'profile_value', 'ordering')));
$query->from($db->quoteName('#__user_profiles'));
$query->where($db->quoteName('profile_key') . ' LIKE '. $db->quote('\'custom.%\''));
$query->order('ordering ASC');

// Reset the query using our newly populated query object.
$db->setQuery($query);

// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$results = $db->loadObjectList();

Пример отсюда: https://docs.joomla.org/Selecting_data_using_JDatabase

Есть ли команда, чтобы распечатать оператор запроса (не результаты, а фактический SQL)?

Мэт Кей
источник
Так что я могу прочитать запрос как «SELECT * FROM ....»
Mat Kay
1
почему бы не использовать режим отладки?
jdog

Ответы:

18

вам нужно повторить __toString ()

echo($query->__toString());

Вы можете найти больше информации здесь

https://docs.joomla.org/API16:JDatabaseQuery/_toString

Надеюсь, это поможет

Пьеро Марсилио
источник
Хотелось бы только отметить, что при использовании этого метода он выводит запрос с префиксом Joomla #__.
Лоддер
echo (строка) $ query;
JProof
9

Вы также можете использовать replacePrefixфункцию Joomla, которая выводит запрос в формате, который может быть вставлен прямо в подобные PhpMyAdmin.

Вот пример:

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->select($db->quoteName('something'))
      ->from($db->quoteName('#__content')); 
$db->setQuery($query);

// Dump the query
echo $db->replacePrefix((string) $query);

Будет выводить следующее:

SELECT `something` FROM `jos_content`
Лоддер
источник
5

Вы также можете использовать нативный dump()метод:echo $query->dump();

Дмитрий Рекун
источник
4

У JDatabaseQueryобъекта есть __toString()функция, которая выводит запрос, поэтому вы можете сделать:

echo $db->getQuery();

Или, если вы хотите передать его функции, вы можете явно привести ее к строке:

var_dump((string)$db->getQuery());
Joomler
источник
0

Функция отладки Joomla даст вам много информации о запросах, которые выполняются при загрузке вашего сайта.

Клаус Велиу
источник
0
echo $query;

все будет хорошо.

это использует этот код

echo($query->__toString());
Веб-разработка КОБИЗ
источник