PHP و PostgreSQL: ثنائي قوي لتطوير الويب

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا PHP و PostgreSQL هما حب من أول استعلام؟

\n\n

عالم تطوير الويب مليء بالصور النمطية. أحدها يقول: «PHP يصادق MySQL فقط». هناك بعض الحقيقة في هذا، ولكن فقط حتى تجرب الربط PHP و PostgreSQL. إنه مثل الانتقال من دراجة هوائية إلى دراجة نارية رياضية: نفس العجلات، لكن السرعة وخفة الحركة والموثوقية مختلفة تمامًا.

\n\n

PostgreSQL ليست مجرد قاعدة بيانات. إنها وحش كائني-علائقي يمكنه العمل مع JSON والبيانات الجغرافية والبحث النصي الكامل والمعاملات المعقدة للغاية. و PHP هو القائد المثالي لهذه الأوركسترا. في هذا الدليل، سنغطي كل شيء: من تثبيت برنامج التشغيل إلى كتابة كود جاهز للإنتاج. هيا بنا!

\n\n

1. التثبيت والإعداد: تجهيز الأدوات

\n\n

قبل كتابة الكود، دعنا نتأكد من أن PHP يعرف بوجود PostgreSQL. في معظم توزيعات PHP الحديثة (مثل XAMPP و OpenServer و Docker)، الامتداد pdo_pgsql موجود بالفعل، لكنه يحتاج إلى تفعيل.

\n\n

1.1. تفعيل الامتداد في php.ini

\n\n

افتح ملف php.ini الخاص بك وقم بإلغاء التعليق (أزل الفاصلة المنقوطة في البداية) على السطر:

\n\n
extension=pdo_pgsql
\n\n

إذا كنت تستخدم Linux، فالتثبيت يكون كالتالي:

\n\n
sudo apt-get install php-pgsql\nsudo service apache2 restart  # أو nginx + php-fpm
\n\n

1.2. إنشاء قاعدة البيانات والمستخدم

\n\n

ادخل إلى وحدة تحكم PostgreSQL:

\n\n
sudo -u postgres psql
\n\n

الآن لننشئ قاعدة بيانات ومستخدمًا لمشروعنا:

\n\n
CREATE 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.

\n\n

2. أول اتصال: PDO كمعيار

\n\n

لا تستخدم أبدًا الدوال القديمة pg_connect(). في PHP الحديثة، يوجد PDO (PHP Data Objects) — واجهة موحدة للعمل مع قواعد بيانات مختلفة. إنها أكثر أمانًا وراحة وتدعم الاستعلامات المحضرة.

\n\n

2.1. فئة غلاف للاتصال

\n\n

لننشئ فئة بسيطة Database تدير الاتصال:

\n\n
<?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. هذا يحسن الأداء والأمان.

\n\n

3. عمليات CRUD: إنشاء، قراءة، تحديث، حذف

\n\n

الآن الجزء المهم. لنفترض أن لدينا جدول articles للمقالات على pythonlib.ru.

\n\n

3.1. إنشاء الجدول

\n\n

نفذ هذا SQL في قاعدة بياناتك (عبر psql أو لوحة الإدارة):

\n\n
CREATE TABLE articles (\n    id SERIAL PRIMARY KEY,\n    title VARCHAR(255)                

المدونات

توصيات الكتب