2012-07-23 10 views
10

एसक्यूएलएसआरवी चालक बनाम पीडीओ चालक (एमएस एसक्यूएल सर्वर के साथ PHP के लिए) के बीच चयन करते समय मुझे क्या विचार करना चाहिए?एसएसएलएसआरवी चालक बनाम पीडीओ ड्राइवर एमएस एसक्यूएल सर्वर

मैंने यह पिछला स्टैक ओवरफ्लो पोस्ट (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?) देखा लेकिन उत्तर में थोड़ा कमी आई है और SQL12R9 ड्राइवर का उपयोग करने के सभी लाभों का उल्लेख नहीं करता है जैसा कि this article में उल्लिखित है।

मैं एक व्यापक और अद्यतित की तलाश में हूं (उदाहरण के लिए यह अभी भी मामला है कि SQLSRV ड्राइवर केवल विंडोज के लिए उपलब्ध है?) उत्तर दें कि प्रोग्रामर संसाधन के रूप में संदर्भित हो सकते हैं।

उत्तर

7

पीडीओ आपको उचित रूप से डीबी-तटस्थ होने के लिए कोड लिखने की अनुमति देता है।

यदि आप चाहते हैं सही मायने में डीबी तटस्थ, आप NotORM की तरह एक पूर्ण डीबी अमूर्त परत का उपयोग करना चाहते हैं - सादा पीडीओ के साथ, आप अब भी SQL सिंटैक्स अंतर के बारे में सावधान रहने की आवश्यकता होगी, लेकिन कम से कम अपने बुनियादी पीएचपी कोड डीबी-तटस्थ होगा।

डीबी-तटस्थ होने के नाते अब महत्वपूर्ण नहीं लग रहा है - यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो शायद आपको बताया गया है कि क्या आवश्यक है और कुछ और नहीं - लेकिन आप भविष्यवाणी नहीं कर सकते कि चीजें कैसे बदलेगी भविष्य, इसलिए यदि विकल्प डीबी-तटस्थ चालक और डीबी-विशिष्ट ड्राइवर के बीच है, और आपके पास वरीयता के लिए कोई अन्य कारण नहीं है, तो तटस्थ के साथ जाएं .... यह जीवन को एक बना देगा यदि आपकी कंपनी को ले लिया जाता है तो बहुत आसान होता है और नया मालिक ओरेकल को डीबी के रूप में उपयोग करना चाहता है!

इसके अलावा, क्योंकि यह डीबी तटस्थ है, पीडीओ PHP समुदाय में अधिक मानक और अधिक प्रसिद्ध है। एमएसएसएलएल चालक के मुकाबले आपको पीडीओ के साथ साइटों (ऑनलाइन इस तरह) से बहुत अधिक मदद मिलेगी।

10

एसक्यूएलएसआरवी और पीडीओ_SQLSRV दो current-generation php drivers available from Microsoft हैं, लेकिन दोनों नीचे दिए गए कोड का उपयोग करते हैं: SQL सर्वर मूल क्लाइंट 11. (यही कारण है कि PHP ड्राइवरों का कोई मैक या लिनक्स संस्करण नहीं है: वे केवल रैपर हैं।) दोनों का प्रदर्शन ड्राइवर समान होना चाहिए; यह सिर्फ एक बात है कि आप कौन सी एपीआई पसंद करते हैं।

ज्यादातर मामलों में कोई क्रॉस-प्लेटफ़ॉर्म विचारों के कारण PDO_SQLSRV ड्राइवर का उपयोग करेगा। हालांकि, एक नई (छोटी) परियोजना के लिए दोनों ड्राइवरों को देखने के बाद मैं SQLSRV ड्राइवर के साथ गया क्योंकि यह अंतर्निहित SQL सर्वर डेटाटाइप के रूप में डेटा [मानचित्र का] के रूप में देता है, जबकि PDO_SQLSRV सब कुछ एक स्ट्रिंग के रूप में देता है।

इसलिए यदि आपके एसक्यूएल है:

SELECT 1234 as integer, Cast(123.456 as float) as float, 
     getdate() as date, '1234' as string1,'123.456' as string2; 

फिर PDO_SQLSRV से पंक्ति के var_dump देता है:

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     string(4) "1234" 
     'float' => 
     string(7) "123.456" 
     'date' => 
     string(23) "2012-12-06 22:35:05.373" 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

जबकि SQLSRV ड्राइवर देता है:

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     int(1234) 
     'float' => 
     double(123.456) 
     'date' => 
     class DateTime#1 (3) { 
     ... 
     } 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

यह मुझे पागल कर दिया कि PDO_SQLSRV ने मेरे सभी डेटा को स्ट्रिंग में डाला है चाहे मैं इसे चाहता था या नहीं, इसलिए मैंने SQLSRV का उपयोग किया। (मुझे यह मानना ​​है कि मैंने ReturnDatesAsStrings=true सेट किया है क्योंकि मैं डेट क्लास से निपटने के लिए बहुत आलसी था।)

मुझे सिंटैक्स थोड़ा बेहतर पसंद है, लेकिन यह सिर्फ मुझे है।

4

माइक्रोसॉफ्ट ने आखिरकार PHP के साथ काम करने के लिए अपने मूल चालक को सिलाई करने के लिए कुछ संसाधन किए हैं। मैं वर्तमान में अपाचे 2.4 64 बिट पर बीटा परीक्षण कर रहा हूं।

Beta PHP 7 SQL_SRV 64Bit Driver

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