PHP और PostgreSQL पहली क्वेरी से ही प्यार क्यों हैं?
\n\nवेब डेवलपमेंट की दुनिया रूढ़ियों से भरी है। उनमें से एक कहता है: "PHP केवल MySQL के साथ दोस्ती करता है"। इसमें कुछ सच्चाई है, लेकिन केवल तब तक जब तक आप PHP और PostgreSQL के संयोजन को आज़माते नहीं हैं। यह साइकिल से स्पोर्ट्स मोटरसाइकिल पर जाने जैसा है: वही पहिए, लेकिन गति, चपलता और विश्वसनीयता बिल्कुल अलग होती है।
\n\nPostgreSQL सिर्फ एक डेटाबेस नहीं है। यह एक ऑब्जेक्ट-रिलेशनल राक्षस है जो JSON, जियोडेटा, फुल-टेक्स्ट सर्च और जटिल ट्रांजेक्शन के साथ काम कर सकता है। और PHP इस ऑर्केस्ट्रा के लिए एक आदर्श कंडक्टर है। इस गाइड में, हम सब कुछ कवर करेंगे: ड्राइवर इंस्टॉल करने से लेकर production-ready कोड लिखने तक। चलिए शुरू करते हैं!
\n\n1. इंस्टॉलेशन और सेटअप: उपकरण तैयार करना
\n\nकोड लिखने से पहले, सुनिश्चित करें कि PHP को PostgreSQL के अस्तित्व के बारे में पता है। अधिकांश आधुनिक PHP वितरणों (जैसे, XAMPP, OpenServer, Docker) में pdo_pgsql एक्सटेंशन पहले से मौजूद है, लेकिन इसे सक्रिय करने की आवश्यकता है।
1.1. php.ini में एक्सटेंशन सक्षम करना
\n\nअपना php.ini खोलें और निम्नलिखित पंक्ति को अनकमेंट करें (शुरुआत में सेमीकोलन हटाएं):
extension=pdo_pgsql\n\nयदि आप Linux का उपयोग कर रहे हैं, तो इंस्टॉलेशन इस प्रकार दिखता है:
\n\nsudo apt-get install php-pgsql\nsudo service apache2 restart # या nginx + php-fpm\n\n1.2. डेटाबेस और उपयोगकर्ता बनाना
\n\nPostgreSQL कंसोल में प्रवेश करें:
\n\nsudo -u postgres psql\n\nअब अपने प्रोजेक्ट के लिए एक डेटाबेस और उपयोगकर्ता बनाएं:
\n\nCREATE DATABASE pythonlib_blog;\nCREATE USER myapp WITH PASSWORD 'SuperSecret123';\nGRANT ALL PRIVILEGES ON DATABASE pythonlib_blog TO myapp;\n\\q\n\nहो गया। अब हमारे पास pythonlib_blog डेटाबेस और myapp उपयोगकर्ता है।
2. पहला कनेक्शन: PDO एक मानक के रूप में
\n\nपुराने pg_connect() फंक्शन का कभी उपयोग न करें। आधुनिक PHP में PDO (PHP Data Objects) है - विभिन्न डेटाबेस के साथ काम करने के लिए एक एकीकृत इंटरफ़ेस। यह अधिक सुरक्षित, सुविधाजनक है और तैयार क्वेरी (prepared statements) का समर्थन करता है।
2.1. कनेक्शन के लिए रैपर क्लास
\n\nएक सरल Database क्लास बनाएं जो कनेक्शन का प्रबंधन करेगी:
<?php\n\nclass Database {\n private static ?PDO $instance = null;\n private const DB_HOST = 'localhost';\n private const DB_PORT = 5432;\n private const DB_NAME = 'pythonlib_blog';\n private const DB_USER = 'myapp';\n private const DB_PASS = 'SuperSecret123';\n\n public static function getConnection(): PDO {\n if (self::$instance === null) {\n $dsn = "pgsql:host=" . self::DB_HOST . ";port=" . self::DB_PORT . ";dbname=" . self::DB_NAME;\n try {\n self::$instance = new PDO($dsn, self::DB_USER, self::DB_PASS, [\n PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,\n PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n PDO::ATTR_EMULATE_PREPARES => false,\n ]);\n } catch (PDOException $e) {\n die("Connection failed: " . $e->getMessage());\n }\n }\n return self::$instance;\n }\n}\n\nयह क्यों अच्छा है? पहला, सिंगलटन - हम हर अनुरोध पर नया कनेक्शन नहीं बनाते। दूसरा, ATTR_EMULATE_PREPARES => false PostgreSQL को PHP की ओर से एमुलेशन के बजाय वास्तविक तैयार क्वेरी का उपयोग करने के लिए मजबूर करता है। इससे प्रदर्शन और सुरक्षा बढ़ती है।
3. CRUD-ऑपरेशन: बनाना, पढ़ना, अपडेट करना, हटाना
\n\nअब असली मज़ा। मान लें कि हमारे पास pythonlib.ru पर लेखों के लिए articles तालिका है।
3.1. तालिका बनाना
\n\nअपने डेटाबेस में यह SQL चलाएं (psql या एडमिन पैनल के माध्यम से):
\n\nCREATE TABLE articles (\n id SERIAL PRIMARY KEY,\n title VARCHAR(255)