2013-05-05 3 views
10

पीडीओ के लिए संदर्भ देना एक पीडीओ वस्तु के बराबर और itself-- पीडीओ नहींअंतर> क्वेरी() और PDO-> कार्यकारी()

मैं here देखना है कि वहाँ PDO->query() और PDO->exec() दोनों। पेज कि जुड़ा हुआ था तो ऐसा लगता है कि PDO->query();SELECT बयान के लिए ही किया जाता है, और PDO->exec()UPDATE, INSERT, DELETE बयानों के लिए प्रयोग किया जाता है। अब, मैं पीडीओ के लिए नया ब्रांड हूं, इसलिए मुझे यकीन नहीं है कि का उपयोग करने के मामले में का उपयोग करने के मामले में क्या चल रहा है, इसलिए मैं विभिन्न विधियों का उपयोग क्यों करें, और विभिन्न तरीकों का उपयोग करने के बारे में एक स्पष्टीकरण की सराहना करता हूं। official docs for PDO पर

उत्तर

19

जो भी सैद्धांतिक अंतर के बावजूद, इन कार्यों में से कोई भी किसी भी तरह का उपयोग नहीं किया जाना चाहिए - इसलिए, चिंता करने की कोई बात नहीं है।

पीडीओ का उपयोग करने का एकमात्र कारण तैयार बयान के लिए समर्थन है, लेकिन इनमें से कोई भी कार्य इसे प्रदान नहीं करता है। तो, उनका उपयोग नहीं किया जाना चाहिए।

उपयोग prepare()/execute() बजाय, विशेष रूप से अद्यतन, सम्मिलित करें के लिए, बयान हटाएँ।

कृपया ध्यान दें कि यद्यपि तैयार वक्तव्यों को सुरक्षा उपाय के रूप में व्यापक रूप से विज्ञापित किया जाता है, यह केवल लोगों का ध्यान आकर्षित करने के लिए है। लेकिन उनके वास्तविक उद्देश्य उचित क्वेरी स्वरूपण है। जो आपको सुरक्षा भी देता है - जैसा उचित ढंग से स्वरूपित क्वेरी को इंजेक्शन भी नहीं दिया जा सकता - जैसे साइड इफेक्ट। लेकिन फिर - स्वरूपण एक प्राथमिक लक्ष्य है, सिर्फ इसलिए कि निर्दोष डेटा भी क्वेरी त्रुटि का कारण बन सकता है यदि सही तरीके से प्रारूपित नहीं किया गया हो।

संपादित करें: कृपया ध्यान दें कि execute() रिटर्न केवल TRUE या FALSE ऑपरेशन की सफलता से संकेत मिलता है। अन्य जानकारी के लिए, जैसे UPDATE से प्रभावित रिकॉर्ड्स की संख्या, rowCount() जैसी विधियां प्रदान की जाती हैं। docs देखें।

+1

सच है, मैंने बस उस पृष्ठ में पढ़ा है जिसे मैं पढ़ रहा हूं। आपके इनपुट के लिए भी धन्यवाद। जब मैं चर (उपयोगकर्ता इनपुट) से निपट रहा हूं, तो केवल तैयार नहीं किया जाना चाहिए और निष्पादित नहीं करना चाहिए, और जब मैं सिर्फ अपने लिए कुछ जानकारी पकड़ रहा हूं जो किसी भी प्रकार के इनपुट में डाले गए किसी भी चीज़ पर निर्भर नहीं है? आपके इनपुट के लिए फिर से धन्यवाद। :) –

+1

तैयार बयान "किसी भी प्रकार के इनपुट" के लिए नहीं हैं। वे ठीक से चलने वाले प्रश्नों के लिए हैं, भले ही आप उन्हें अपने लिए या किसी और के लिए चलाएं। यह उचित क्वेरी स्वरूपण का मामला है, सुरक्षा नहीं। –

+0

आह, ठीक है। क्षमा करें, अभी तक यह नहीं मिला है। स्पष्टीकरण के लिए धन्यवाद! –

13

देखो:

  • PDO::exec() - "एक SQL बयान निष्पादित और प्रभावित पंक्तियों की संख्या लौटने"
  • PDO::query() - "एक SQL बयान निष्पादित एक परिणाम के एक PDOStatement वस्तु के रूप में सेट लौटने"

दोनों कार्य क्वेरी निष्पादित करते हैं, लेकिन exec() केवल प्रभावित पंक्तियों की संख्या देता है। यह UPDATE क्वेरी के लिए उपयोगी है जहां कुछ उपयोगी नहीं लौटाया जाता है और यह जानना उपयोगी होता है कि पंक्तियों की उचित संख्या में संशोधन किया गया था या नहीं।

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