Jak wydrukować zapytanie Joomla?

14

Załóżmy, że zbudowałeś zapytanie za pomocą 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();

Przykład stąd: https://docs.joomla.org/Selecting_data_using_JDatabase

Czy istnieje polecenie wydrukowania instrukcji zapytania (nie wyniki, ale rzeczywisty SQL)?

Mat Kay
źródło
Tak, że mogę odczytać zapytanie jako „WYBIERZ * OD ....”
Mat Kay,
1
dlaczego nie skorzystać z trybu debugowania?
jdog

Odpowiedzi:

18

musisz echo __toString ()

echo($query->__toString());

Tutaj możesz uzyskać więcej informacji

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

Mam nadzieję, że to pomoże

Piero Marsilio
źródło
Chciałbym tylko zauważyć, że podczas korzystania z tej metody zrzuca zapytanie z prefiksem Joomla #__.
Lodder
echo (string) $ query;
JProof 20.04.16
9

Możesz także użyć replacePrefixfunkcji Joomla, która zrzuca zapytanie w formacie, który można wstawić bezpośrednio do programów takich jak PhpMyAdmin.

Oto przykład:

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

Wyprowadzi następujące:

SELECT `something` FROM `jos_content`
Lodder
źródło
5

Możesz także użyć dump()metody natywnej :echo $query->dump();

Dmitry Rekun
źródło
4

JDatabaseQueryObiekt posiada __toString()funkcję, która wyprowadza zapytanie więc można zrobić:

echo $db->getQuery();

Lub jeśli chcesz przekazać go do funkcji, możesz najpierw jawnie rzucić ją na ciąg znaków:

var_dump((string)$db->getQuery());
Joomler
źródło
0

Funkcja debugowania Joomla daje wiele informacji na temat zapytań, które są wykonywane podczas ładowania witryny.

Klaus Veliu
źródło
0
echo $query;

da sobie radę.

wykorzystuje to ten kod

echo($query->__toString());
Rozwój stron internetowych COBIZ
źródło