Como posso imprimir uma consulta Joomla?

14

Suponha que você tenha construído uma consulta com o 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();

Exemplo daqui: https://docs.joomla.org/Selecting_data_using_JDatabase

Existe um comando para imprimir a instrução de consulta (não os resultados, mas o SQL real)?

Mat Kay
fonte
Para que eu possa ler a consulta como "SELECT * FROM ...."
Mat Kay
1
por que não usar o modo de depuração?
Jdog 18/09/2015

Respostas:

18

você precisa ecoar __toString ()

echo($query->__toString());

você pode obter mais informações aqui

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

Espero que ajude

Piero Marsilio
fonte
Gostaria apenas de observar que, ao usar esse método, ele despeja a consulta com o prefixo do Joomla #__.
Lodder #
eco (string) $ query;
precisa saber é o seguinte
9

Você também pode usar a replacePrefixfunção do Joomla, que despeja a consulta em um formato que pode ser inserido diretamente nos gostos do PhpMyAdmin.

Aqui está um exemplo:

$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);

Produzirá o seguinte:

SELECT `something` FROM `jos_content`
Lodder
fonte
5

Você também pode usar o dump()método nativo :echo $query->dump();

Dmitry Rekun
fonte
4

O JDatabaseQueryobjeto possui uma __toString()função que gera a consulta para que você possa fazer:

echo $db->getQuery();

Ou, se você deseja passá-lo para uma função, pode convertê-lo explicitamente em uma string primeiro:

var_dump((string)$db->getQuery());
Joomler
fonte
0

O recurso de depuração do Joomla fornecerá muitas informações sobre as consultas executadas quando o site for carregado.

Klaus Veliu
fonte
0
echo $query;

vai dar certo.

isso faz uso desse código

echo($query->__toString());
Desenvolvimento web COBIZ
fonte