SelectQuery
Implements SelectQuery::__toString()
, який викликається в контекстах, де потрібен рядок.
Розглянемо наступний код.
global $theme_key;
$query = db_select('block')
->condition('theme', $theme_key)
->condition('status', 1)
->fields('block');
print $query;
Його вихід наступний.
SELECT block.*
FROM
{block} block
WHERE (theme = :db_condition_placeholder_0) AND (status = :db_condition_placeholder_1)
Щоб отримати масив аргументів, використаних для запиту, ви можете зателефонувати SelectQuery::arguments()
.
Наступний код друкує запит та його аргументи, використовуючи функції, доступні в модулі Devel.
global $theme_key;
$query = db_select('block')
->condition('theme', $theme_key)
->condition('status', 1)
->fields('block');
dpm((string) $query);
dpm($query->arguments());
Модуль Devel, однак, не потрібен, і ви могли drupal_set_message()
б показати вихід. Наприклад, ви можете використовувати наступну функцію, щоб отримати рядок із заповнювачами замінених на їх фактичні значення.
function _get_query_string(SelectQueryInterface $query) {
$string = (string) $query;
$arguments = $query->arguments();
if (!empty($arguments) && is_array($arguments)) {
foreach ($arguments as $placeholder => &$value) {
if (is_string($value)) {
$value = "'$value'";
}
}
$string = strtr($string, $arguments);
}
return $string;
}
Попередній код прикладу, який я показав, став би наступним.
global $theme_key;
$query = db_select('block')
->condition('theme', $theme_key)
->condition('status', 1)
->fields('block');
drupal_set_message(format_string('Query: %query', array('%query' => _get_query_string($query))));
function _get_query_string(SelectQueryInterface $query) {
$string = (string) $query;
$arguments = $query->arguments();
if (!empty($arguments) && is_array($arguments)) {
foreach ($arguments as $placeholder => &$value) {
if (is_string($value)) {
$value = "'$value'";
}
}
$string = strtr($string, $arguments);
}
return $string;
}
Зверніть увагу , що SelectQuery::arguments()
повертає масив аргументів запиту тільки тоді , коли вона викликається після SelectQuery::__toString()
, SelectQuery::compile()
або SelectQuery::execute()
; інакше SelectQuery::arguments()
повертається NULL
.
Ви можете використовувати функцію, подібну до наступної, щоб отримати рядок запиту, при цьому заповнювачі заповнення замінені аргументами.
_get_query_string()
повинна, була частиноюSelectQuery
інтерфейсу.