41- MySQL شرح Prepared Statements – PHP

Prepared Statements في لغة PHP تعتبر واحدة من أهم التقنيات المستخدمة في التعامل مع قواعد البيانات بشكل آمن وفعال. توفر هذه التقنية وسيلة لتحضير استعلام SQL بحيث يمكن تنفيذه بعد ذلك عدة مرات بكفاءة وأمان عاليين، مما يساعد في الحماية ضد هجمات حقن SQL (SQL Injection) وتحسين أداء التطبيق.

ما هي Prepared Statements؟

Prepared Statements هي [شركة برمجة مصرية] ميزة مدعومة من قبل مكتبات قواعد البيانات مثل PDO (PHP Data Objects) و MySQLi في PHP. تتيح لك هذه الميزة كتابة قالب للاستعلام يحتوي على معلمات بديلة، ويمكنك بعد ذلك تنفيذ هذا الاستعلام بتمرير القيم الفعلية لتلك المعلمات في وقت التنفيذ.

لماذا نستخدم Prepared Statements؟

1. **الحماية من حقن SQL**: واحدة من أكبر الفوائد هي الحماية من هجمات حقن SQL. عند استخدام Prepared Statements، يتم التعامل مع المعلمات بشكل منفصل عن استعلام SQL نفسه، مما يمنع إدخال تعليمات ضارة.

2. **تحسين الأداء**: في بعض أنظمة إدارة قواعد البيانات، يتم تحليل الاستعلام مرة واحدة فقط عند تحضيره، ويمكن إعادة استخدامه بكفاءة لتنفيذ الاستعلامات المتكررة.

3. **سهولة الاستخدام**: تجعل إدارة المعلمات أسهل وأكثر وضوحًا، خاصة مع الاستعلامات المعقدة.

كيفية استخدام Prepared Statements في PHP

لنلق نظرة على كيفية استخدام Prepared Statements مع مكتبة PDO، والتي تعتبر الأكثر مرونة وتدعماً لأنواع متعددة من قواعد البيانات.

مثال باستخدام PDO

<?php
try {
    // إنشاء اتصال PDO
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // تحضير الاستعلام
    $stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status = :status');

    // تنفيذ الاستعلام مع القيم
    $email = 'example@example.com';
    $status = 'active';
    $stmt->execute(['email' => $email, 'status' => $status]);

    // جلب النتائج
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($results as $row) {
        echo $row['name'] . "<br>";
    }
} catch (PDOException $e) {
    echo 'Error: ' . $e->getMessage();
}
?>

مثال باستخدام MySQLi

<?php
// إنشاء اتصال MySQLi
$mysqli = new mysqli("localhost", "username", "password", "testdb");

// التحقق من الاتصال
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// تحضير الاستعلام
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ? AND status = ?");

// ربط المعلمات
$email = 'example@example.com';
$status = 'active';
$stmt->bind_param("ss", $email, $status);

// تنفيذ الاستعلام
$stmt->execute();

// جلب النتائج
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo $row['name'] . "<br>";
}

// إغلاق الاتصال
$stmt->close();
$mysqli->close();
?>

النقاط الرئيسية

– **المرونة**: Prepared Statements قابلة لإعادة الاستخدام مع قيم معلمات مختلفة، مما يجعلها مناسبة للاستعلامات المتكررة.
– **الأمان**: فصل المعلمات عن الاستعلام يحمي ضد الهجمات الشائعة مثل SQL Injection.
– **التوافق**: يمكن استخدامها مع قواعد بيانات مختلفة عند [شركة برمجة مصرية] استخدام مكتبة PDO.

Prepared Statements هي وسيلة قوية وضرورية عند التعامل مع قواعد البيانات في PHP، وتساعد في كتابة كود أكثر أمانًا وفعالية. من خلال استخدامها، يمكنك التأكد من أن تطبيقاتك أكثر أمانًا وأقل عرضة للهجمات.