पीडीओ एक अच्छा इंटरफ़ेस, लेकिन अधिक genericity भी प्रत्येक बैकएंड के सूक्ष्म idiosyncrasies के साथ निपटने के लिए और अधिक परेशानी का मतलब है प्रदान करता है। यदि आप the bugtracker देखते हैं, तो इसमें कई खुले मुद्दे हैं, और उनमें से कुछ गंभीर हैं।
पोस्टग्रेस्क्ल के साथ यहां एक अचूक सबूत है: पीडीओ के पार्सर को मानक_कॉन्फोर्मिंग_स्ट्रिंग्स को चालू करने के लिए परेशानी है (जो अब डिफ़ॉल्ट है, पीजी-9.1 के रूप में)। php-5.3.9 के साथ टेस्ट मामला:
$dbh->exec("SET standard_conforming_strings=on");
$p=$dbh->prepare("SELECT 1 WHERE 'ab\' = :foo AND 'cd' = :bar");
$p->execute(array(":foo" => "ab", ":bar" => "cd"));
निष्पादित() अप्रत्याशित रूप से Database error: SQLSTATE[HY093]: Invalid parameter number: :foo
साथ पीडीओ परत में विफल रहता है। ऐसा लगता है कि यह पहचानने में असमर्थ है: पैरामीटर के रूप में foo।
यदि क्वेरी 'ab\'=:foo
के बाद बंद हो जाती है, तो बिना किसी शर्त के, यह ठीक काम करता है। या यदि अन्य स्थिति में स्ट्रिंग शामिल नहीं है, तो यह भी ठीक काम करता है।
समस्या issue #55335 के समान दिखती है, जिसे के रूप में खारिज कर दिया गया था, मेरी राय में काफी गलत नहीं है। [वास्तव में, मैंने इसे ठीक करने के लिए पीडीओ को भी हैक किया है, लेकिन इस तरह से अन्य बैकएंड के साथ असंगत है, इसलिए कोई पैच नहीं है। मैं क्वेरी जेक्सिकल विश्लेषक इतने सामान्य होने से विघटित था।]
दूसरी तरफ, pg_ * libpq के करीब होने के कारण, इस तरह की समस्या पहले स्थान पर होने की संभावना कम होती है, और अगर यह हल हो जाती है तो हल करना आसान होता है।
तो मेरा मुद्दा यह होगा कि पीडीओ के साथ सब कुछ अच्छा नहीं है। आंतरिक रूप से, यह निश्चित रूप से pg_ * से अधिक चुनौतीपूर्ण है, और अधिक जटिलता का अर्थ अधिक बग है। क्या ये बग संबोधित हैं? कुछ बगट्रैक प्रविष्टियों के आधार पर, जरूरी नहीं।
@MorrisonHotel मुझे माफ़ कर दो? – shadyyx
मेरी टिप्पणी खराब है, आप नहीं :) – MorrisonHotel
पोस्टग्रेएसक्यूएल: ** चुनें I_TING (...) mytable LIMIT 1 ऑफ़सेट 1 ** MySQL: ** SELECT DATE_FORMAT (...) mytable LIMIT से 1,1 ** जैसा कि हम देखते हैं, यहां तक कि पीडीओ का उपयोग करके, मुझे डेटाबेस में सभी अनुरोधों को फिर से लिखना होगा। तो, पीडीओ एक पैनसिया नहीं है। मुझे सिद्धांत, प्रोपेल इत्यादि का उपयोग करना होगा (बाहर रखा गया है)। – MorrisonHotel