SelectQuery
औजार 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()
।
निम्नलिखित कोड डीवेल मॉड्यूल से उपलब्ध कार्यों का उपयोग करके क्वेरी और उसके तर्कों को प्रिंट करता है।
global $theme_key;
$query = db_select('block')
->condition('theme', $theme_key)
->condition('status', 1)
->fields('block');
dpm((string) $query);
dpm($query->arguments());
हालांकि, देवल मॉड्यूल आवश्यक नहीं है, और आप 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
इंटरफ़ेस का हिस्सा होना चाहिए था ।