¿Cómo puedo imprimir una consulta de Joomla?

14

Supongamos que ha construido una consulta con 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();

Ejemplo desde aquí: https://docs.joomla.org/Selecting_data_using_JDatabase

¿Existe un comando para imprimir la declaración de consulta (no los resultados sino el SQL real)?

Mat Kay
fuente
Para que pueda leer la consulta como "SELECCIONAR * DE ...."
Mat Kay
1
¿Por qué no utilizar el modo de depuración?
jdog

Respuestas:

18

necesitas hacer eco de __toString ()

echo($query->__toString());

puedes encontrar más información aquí

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

Espero eso ayude

Piero Marsilio
fuente
Solo me gustaría señalar que cuando se usa este método, se vuelca la consulta con el prefijo Joomla #__.
Lodder
echo (cadena) $ consulta;
JProof
9

También puede usar la replacePrefixfunción de Joomla, que descarga la consulta en un formato que se puede insertar directamente en los gustos de PhpMyAdmin.

Aquí hay un ejemplo:

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

Producirá lo siguiente:

SELECT `something` FROM `jos_content`
Lodder
fuente
5

También puede usar el dump()método nativo :echo $query->dump();

Dmitry Rekun
fuente
4

El JDatabaseQueryobjeto tiene una __toString()función que genera la consulta para que pueda hacer:

echo $db->getQuery();

O si desea pasarlo a una función, puede convertirlo explícitamente en una cadena primero:

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

La función de depuración de Joomla le dará mucha información sobre las consultas que se ejecutan cuando se carga su sitio web.

Klaus Veliu
fuente
0
echo $query;

Lo haré bien.

esto hace uso de este código

echo($query->__toString());
Desarrollo web COBIZ
fuente