🐘 شرح PHP

المساحات الاسمية وقواعد البيانات

المساحات الاسمية (Namespaces)

تنظّم الكود وتمنع تضارب الأسماء بين المكتبات:

<?php
// ملف App/Models/User.php
namespace App\Models;

class User {
    public function name(): string {
        return "مستخدم";
    }
}
?>

استخدامها:

<?php
use App\Models\User;

$user = new User();
?>

Composer والتحميل التلقائي

Composer مدير حزم PHP (مثل npm لـ Node). يثبّت المكتبات ويحمّل أصنافك تلقائيًّا:

composer require monolog/monolog
<?php
require "vendor/autoload.php";   // يحمّل كل المكتبات والأصناف
?>

الاتصال بـ MySQL عبر PDO

PDO الطريقة الحديثة الآمنة (تدعم عدّة قواعد بيانات):

<?php
$pdo = new PDO(
    "mysql:host=localhost;dbname=myapp;charset=utf8mb4",
    "root",
    $password,
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
?>

الاستعلامات المُجهّزة (ضدّ حقن SQL)

⚠️ أهمّ قاعدة أمان: لا تدمج مدخلات المستخدم في نصّ الاستعلام أبدًا. استخدم الاستعلامات المُجهّزة دائمًا.

<?php
// إدراج آمن
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);

// قراءة آمنة بمعاملات مسمّاة
$stmt = $pdo->prepare("SELECT * FROM users WHERE age > :age");
$stmt->execute(["age" => 18]);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($users as $user) {
    echo htmlspecialchars($user["name"]);
}

// آخر معرّف مُدرَج
echo $pdo->lastInsertId();
?>

💡 لتعمّق في SQL نفسه (الجداول، JOIN، الفهارس) راجع مسار SQL المستقلّ على The Code Fix.

لمحة عن AJAX

تحدّث جزءًا من الصفحة دون إعادة تحميلها — المتصفّح يطلب من PHP في الخلفية ويعرض الرد:

fetch("data.php")
  .then((res) => res.json())
  .then((data) => console.log(data));

أخطاء شائعة

  • دمج مدخلات المستخدم في الاستعلام (حقن SQL) بدل المعاملات.
  • كتابة كلمة مرور قاعدة البيانات في الكود ورفعها إلى Git.

🎯 التالي: الخلاصة وخطواتك بعد PHP.