बाइंड तंत्र स्तंभ या तालिका नामों के साथ काम नहीं करता है।
सरल उदाहरण:
CREATE TABLE :bar (rowId int)
SELECT :foo FROM :bar
उज्जवल पक्ष पर, यह कुछ आप अक्सर की जरूरत है या करना चाहते हैं नहीं है।
लेकिन जब आप करते हैं ... पीडीओ आपको लटका देता है। समाधान मैन्युअल रूप से एक साथ अपने क्वेरी स्ट्रिंग concating है, जबकि भागने से हाथ कर रही:
$foo = some_escape_logic($dirtyFoo);
$bar = some_escape_logic($dirtyBar);
$db->query("SELECT {$foo} FROM {$bar}");
एसक्यूएल परिणाम हमेशा तार
लाने (के रूप में वापस) स्ट्रिंग मूल्यों की एक सरणी देता है, यहां तक कि एसक्यूएल तालिका अगर प्रकार संख्यात्मक हैं। उदाहरण के लिए, bigint/स्ट्रिंग/bigint कॉलम युक्त तालिका देता है:
array('rowId' => '1', 'name' => 'Fred', 'age' => '12');
बजाय
:
array('rowId' => 1, 'name' => 'Fred', 'age' => 12);
एक सकारात्मक रूप में, आप PHP और एसक्यूएल प्रकार के बीच एक बेमेल से परिशुद्धता कभी न खोएं। PHP में टाइप जॉगलिंग यह भी सुनिश्चित करता है कि आप शायद ही कभी ध्यान दें कि डेटा मूल रूप से तारों के रूप में एन्कोड किया गया था।
एक नकारात्मक रूप में, यह एक दर्द जब json_encode (की तरह कुछ करने के लिए डीबी परिणाम गुजर) हो सकता है, जब से तुम उद्धृत संख्यात्मक मान के साथ खत्म हो जाएगा:
{ "rowId": "1", "name": "Fred", "age": "12" }
बजाय
{ "rowId": 1, "name": "Fred", "age": 12 }
एक आदर्श दुनिया में, fetch() से स्वत: कास्टिंग आउटपुट प्रकार वैकल्पिक तर्क के माध्यम से नियंत्रित किया जाएगा।
PHP के साथ हमेशा की तरह ही बात: प्रकार असुरक्षित मतलब है कि डेवलपर अनुशासित नहीं है। बग शिकार नरक। सामान्य। – bdares
@bdares यह वास्तव में सुंदर प्रकार सुरक्षित है, और आपका तर्क पीडीओ के खिलाफ नहीं, PHP और इसकी प्रकृति के खिलाफ है। –
मुझे नहीं पता कि सभी डेटाबेस के लिए एक ही वाक्यविन्यास से आपका क्या मतलब है। यदि आपका मतलब एसक्यूएल है, तो आप गलत हैं। पीडीओ डेटा-एक्सेस एब्स्ट्रक्शन लेयर है और डेटाबेस एब्स्ट्रक्शन नहीं है, एसक्यूएल अलग रहता है। यदि आप प्रश्न बनाने में मतलब रखते हैं, तो आप सही हो सकते हैं, लेकिन एक साधारण रैपर लिखना आपको एक ही चीज़ प्रदान करता है यदि आप डेटाबेस प्रकार को बदलना चाहते हैं। – frostymarvelous