2012-05-03 13 views
5

मैं कोडनिर्देशक का उपयोग कर रहा हूं और अधिकांश समय मेरे प्रश्नों के लिए सक्रिय रिकॉर्ड का उपयोग करता है (जो स्वचालित रूप से उनसे बच निकलता है), लेकिन यह क्वेरी चर के कारण इसमें अच्छी तरह से फिट नहीं लगती है। इसलिए मुझे यह समझने की ज़रूरत है कि मैन्युअल रूप से क्वेरी से कैसे बचें।एसक्यूएल क्वेरी से बचने + कोडिनेटर

Codeigniter डॉक्स प्रश्नों इस तरह से बचने की सलाह देते हैं:

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")"; 

मेरे मूल प्रश्न

$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}'"; 

मेरे क्वेरी

$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")"; 

भाग निकले लेकिन मैं समस्या हो रही है getti सही वाक्यविन्यास। त्रुटि संदेश हैं:

  • पीएचपी त्रुटि संदेश: अपरिभाषित चर: USER_LANGUAGE
  • एसक्यूएल त्रुटि: वाक्य रचना गलत ... के पास लाइन 1
+0

क्या आप अपनी क्वेरी के साथ कुछ डालना या चुनना चाहते हैं? – Hajo

+0

चुनें। आईएनएसईआरटी कोडिग्निटर दस्तावेज़ों से है। – chowwy

+0

ने मेरा उत्तर अपडेट किया, उम्मीद है कि यह आपके लिए काम करता है:] – Hajo

उत्तर

12
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id); 

पर 'मान (शून्य)' आप अगर $ आईडी द्वारा दिए गए उपयोगकर्ता की भाषा का चयन करना चाहते हैं, इसे इस तरह से काम करना चाहिए।

संख्या के साथ काम कर एक विकल्प होगा:

$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id; 

CodeIgniter के रूप में भी "क्वेरी बाइंडिंग" तैयार बयान का समर्थन करता है:

The secondary benefit of using binds is that the values are automatically escaped, producing safer queries. You don't have to remember to manually escape data; the engine does it automatically for you.

+0

धन्यवाद; यह काम करता हैं! मैंने आपके उत्तर को स्वीकार कर लिया और उखाड़ फेंक दिया। साइड सवाल: क्या कोई तरीका है कि मैं पुष्टि कर सकता हूं कि क्वेरी बच निकली है? मुझे बचने के लिए कुछ अन्य प्रश्न मिल गए हैं और मैं उन्हें बाद में देखना चाहता हूं। – chowwy

+0

अद्यतन के लिए धन्यवाद। यह सहायक है। – chowwy

+0

अच्छी तरह से मैं तैयार बयान का उपयोग कर रहा हूं और वर्षों से बच नहीं रहा हूं। मुझे नहीं पता कि कोडिनेटर उन्हें किस प्रकार समर्थन करता है: http://php.net/manual/en/pdo.prepared-statements.php – Hajo

4

तुम क्यों कहते हैं कि तुम उपयोग नहीं कर सकते मैं उलझन में हूँ सीआई के साथ सक्रिय रिकॉर्ड क्लास, यह एक साधारण एसक्यूएल कॉल है (नीचे उदाहरण method chaining का उपयोग करता है):

$this->db->select('*')->from('user_language')->where('user_id', $id); 
$query = $this->db->get(); 

आपका $id तब ठीक से बच निकला है, और आप किसी भी इंजेक्शन को कम करते हैं। व्यक्तिगत रूप से मैं एआर का उपयोग करता हूं, यह मुझे त्वरित कुशल कोड लिखने की अनुमति देता है, और एसक्यूएल कॉल (कस्टम क्वेरीज) के साथ बुरी चीजों के बारे में चिंता नहीं करता है।

+0

ठीक है, यह ऊपर है। ऐसा नहीं है कि मैं नहीं कर सका, लेकिन मैंने विधि श्रृंखला के बारे में नहीं सुना था। मुझे नहीं पता था कि किस खंड में चर को इंगित करना है। बहुत ज्यादा अधिमूल्यित। – chowwy

+0

@chowwy, यह सब [उपयोगकर्ता मार्गदर्शिका] (http://codeigniter.com/user_guide/database/index.html) में है, यह अच्छे उदाहरणों के साथ बहुत अच्छी तरह से – Jakub

+0

हां, मैं इसे संदर्भ के रूप में उपयोग करता हूं। एक बार फिर धन्यवाद। – chowwy

संबंधित मुद्दे