Comment imprimer une requête Joomla?

14

Supposons que vous ayez construit une requête avec 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();

Exemple d'ici: https://docs.joomla.org/Selecting_data_using_JDatabase

Existe-t-il une commande pour imprimer l'instruction de requête (pas les résultats mais le SQL réel)?

Mat Kay
la source
Pour que je puisse lire la requête comme "SELECT * FROM ...."
Mat Kay
1
pourquoi ne pas utiliser le mode débogage?
jdog

Réponses:

18

vous devez faire écho à __toString ()

echo($query->__toString());

vous pouvez doigter plus d'informations ici

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

J'espère que cela aide

Piero Marsilio
la source
Je voudrais juste noter que lors de l'utilisation de cette méthode, elle vide la requête avec le préfixe Joomla #__.
Lodder du
echo (chaîne) $ query;
JProof
9

Vous pouvez également utiliser la replacePrefixfonction de Joomla qui vide la requête dans un format qui peut être inséré directement dans PhpMyAdmin.

Voici un exemple:

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

Sortira les éléments suivants:

SELECT `something` FROM `jos_content`
Lodder
la source
5

Vous pouvez également utiliser la dump()méthode native :echo $query->dump();

Dmitry Rekun
la source
4

L' JDatabaseQueryobjet a une __toString()fonction qui génère la requête afin que vous puissiez faire:

echo $db->getQuery();

Ou si vous voulez le passer à une fonction, vous pouvez d'abord le convertir explicitement en une chaîne:

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

La fonction de débogage de Joomla vous donnera beaucoup d'informations sur les requêtes qui sont exécutées lors du chargement de votre site Web.

Klaus Veliu
la source
0
echo $query;

fera bien.

cela utilise ce code

echo($query->__toString());
Développement web COBIZ
la source