Codeigniter मॉडल में SQL स्टेटमेंट कैसे प्रिंट करें


107

मेरे मॉडल में एक sql स्टेटमेंट है,

मैं फिर कहता हूं

$query = $this->db->query($sql, array(fields, fields1);

if ($query) {
    return true:
} else {
    echo "failed";
    return false;
}

मेरी क्वेरी हमेशा विफल रहती है, मुझे अपने डेटाबेस में भेजे जा रहे सटीक sql स्टेटमेंट को प्रिंट करने के लिए php कैसे मिलता है? और मेरे php दृश्य, पृष्ठ पर प्रदर्शित करें

जवाबों:


124

क्वेरी स्ट्रिंग प्रदर्शित करने के लिए:

print_r($this->db->last_query());    

क्वेरी परिणाम प्रदर्शित करने के लिए:

print_r($query);

Profiler Class आपके पृष्ठ के निचले भाग में बेंचमार्क परिणाम, आपके द्वारा चलाए गए प्रश्नों और $ _POST डेटा प्रदर्शित करेगा। प्रोफाइलर को अपने नियंत्रक विधियों के भीतर कहीं भी निम्न पंक्ति में सक्षम करने के लिए:

$this->output->enable_profiler(TRUE);

प्रोफाइलिंग उपयोगकर्ता गाइड: https://www.codeigniter.com/user_guide/general/profiling.html


7
जब मैं print_r ($ क्वेरी) करता हूं; कुछ भी प्रिंट नहीं करता है
टेक्नूपे

1
सीआई प्रोफाइलर में बनाया गया है, और अधिक जानकारी का प्रयोग करें यहाँ
नोवो

2
सब मैं करना चाहता हूँ डेटाबेस के लिए पारित के रूप में sql बयान का प्रिंट है, sory लेकिन प्रोफाइलर न तो बहुत मदद कर रहा है
Technupe

मेरे द्वारा पोस्ट किए गए उपयोगकर्ता गाइड लिंक पर जाएं, अगर यह काम नहीं कर रहा है, तो हमें बताएं कि इसके बजाय क्या होता है।
नोवो

अच्छी तरह से मुझे अपनी समस्या का
अंदाज़ा हो


41

आप ActiveRecord उत्पन्न SQL प्रदर्शित कर सकते हैं:

क्वेरी चलने से पहले:

$this->db->_compile_select(); 

और इसके चलने के बाद:

$this->db->last_query(); 

4
जब मैं $ इस का उपयोग करता हूं-> db -> _ compile_select (); मुझे घातक त्रुटि मिली: संरक्षित विधि पर कॉल करें CI_DB_active_record :: _ compile_select () से
एंजेलिन नादर

प्रोफाइलर की बात मेरे लिए अच्छी नहीं है, जो क्वेरी मैं चाहता हूं, वह जटिल नहीं है, बस एसक्यूएल प्राप्त करने के लिए जटिल ... यह मेरे लिए काम करता है: - इको $ यह-> ईई-> डीबी -> _ compile_select ();
लॉरेंस कोप

3
CI3 में, $this->db->get_compiled_select()इसके बजाय का उपयोग करें ।
निक त्वाई

17

यदि आपको अपनी क्वेरी पर त्वरित परीक्षण की आवश्यकता है, तो यह मेरे लिए बहुत अच्छा काम करता है

echo $this->db->last_query(); die;

14

उपयोग करने के लिए सफलता के बिना प्रयास करने के बाद _compiled_select()या get_compiled_select()मैंने सिर्फ dbऑब्जेक्ट प्रिंट किया है, और आप queriesसंपत्ति में क्वेरी देख सकते हैं।

इसे स्वयं आज़माएं:

var_dump( $this->db );

यदि आप जानते हैं कि आपके पास केवल एक क्वेरी है, तो आप इसे सीधे प्रिंट कर सकते हैं:

echo $this->db->queries[0];

9

एक नया सार्वजनिक तरीका है get_compiled_selectजो इसे चलाने से पहले क्वेरी को प्रिंट कर सकता है। _compile_selectअब संरक्षित है इसलिए इसका उपयोग नहीं किया जा सकता है।

echo $this->db->get_compiled_select(); // before $this->db->get();

4
घातक त्रुटि: अपरिभाषित विधि से कॉल करें CI_DB_mysql_driver :: get_compiled_select ()
itskawsar


2

न तो last_query()या get_compiled_select()तो पेड्रो के कोड का एक मामूली बदलाव ठीक मेरे लिए काम करता, मेरे लिए काम करता है। ->get()अपने निर्माण में शामिल न करें, यह -> प्राप्त () से पहले होना चाहिए

 echo $this->EE->db->_compile_select();

1

मैं @ Chumillas के उत्तर और @ chhameed के उत्तर की कोशिश करता हूं, लेकिन यह काम नहीं करता है, क्योंकि sql गलत है। इसलिए मुझे इस तरह से नया दृष्टिकोण मिला :

  • के कार्य से echo $sql; flush(); exit;पहले सम्मिलित करेंreturn $sql; _compile_selectDB_active_rec.php

0

जिस पंक्ति को आप प्रिंट करना चाहते हैं, उसके ठीक बाद यह पंक्ति जोड़ें।

उदाहरण:

$ क्वेरी = $ यह-> db-> क्वेरी ('तालिका से चुनें * जहां शर्त');

// इस लाइन को जोड़ें।

var_dump ($ this-> db-> last_query ());

बाहर जाएं();

या

इको $ यह-> db-> last_query ();


0

मैं संबंधित एक्सटेंशन और CI v2.x के साथ VSCode में इस मूल्यों को देखने के लिए xdebug का उपयोग कर रहा हूं। मैं $this->db->last_query()वॉच सेक्शन xdebugSettingsमें एक्सप्रेशन जोड़ता हूं, और मैं लॉन्च में इस तरह के नोड्स को लॉन्च करता हूं।

{
  "name": "Launch currently open script",
  "type": "php",
  "request": "launch",
  "program": "${file}",
  "cwd": "${fileDirname}",
  "port": 9000,
  "xdebugSettings": {
    "max_data": -1,
    "max_children": -1
  }
},

और मेरे डिबगर को ब्रेकपॉइंट के साथ चलाएं और अंत में बस मेरे एक्सप्रेशन का चयन करें और राइट> कॉपी वैल्यू पर क्लिक करें।


-1

मुझे वास्तव में एक ही समस्या थी और अंततः समाधान मिला। मेरी क्वेरी जैसे चलती है:

$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');

एसक्यूएल कमांड को प्रदर्शित करने के लिए, मुझे केवल इतना करना था कि मेरी क्वेरी के समान सटीक सामग्री के साथ एक चर ($ परिणामी) बनाया जाए और फिर इसे इस तरह से प्रतिध्वनित किया जाए:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

यह काम करता हैं!


यह CodeIgniter तरीका नहीं है।
मिकमैकुसा

-1

get_compiled_select()इसके स्थान पर क्वेरी को पुनः प्राप्त करने के लिए उपयोग करें


मैं यह दिखाने का सुझाव दूंगा कि आप इस विशेष मामले में प्रस्तावित फ़ंक्शन का उपयोग कैसे करें, न कि केवल इसका उल्लेख करें। सबसे अच्छा संबंध है
याकूब

-2

मैं यहां सभी उत्तर पढ़ता हूं, लेकिन प्राप्त नहीं कर सकता

echo $this->db->get_compiled_select();

काम करने के लिए, इसने मुझे त्रुटि दी, जैसे,

संरक्षित विधि के लिए कॉल करें CI_DB_active_record :: _ compile_select () संदर्भ से 'लाइन पर xx में आपका स्वागत है'

इसलिए मैंने protectedफाइल से नीचे की लाइन से हटा दिया \system\database\DB_active_rec.phpऔर यह काम कर गया

protected function _compile_select($select_override = FALSE)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.