تعتبر العبارات المجهزة (Prepared Statements) في PHP من أهم الأدوات التي تساهم في تحسين أمان وفعالية استعلامات SQL. باستخدام هذه العبارات، يمكننا حماية التطبيق من هجمات حقن SQL وضمان تنفيذ الاستعلامات بكفاءة عالية. في هذا المقال، سنتعرف على كيفية استخدام العبارات المجهزة في PHP مع تقديم أمثلة عملية باستخدام MySQLi وPDO.
ما هي العبارات المجهزة (Prepared Statements)؟
العبارات المجهزة هي استعلامات SQL يتم إعدادها وإرسالها إلى قاعدة البيانات مرة واحدة ثم تنفيذها عدة مرات مع تغيير القيم المدخلة. هذا يجعلها أكثر كفاءة من تنفيذ الاستعلامات العادية، بالإضافة إلى أنها توفر حماية إضافية ضد هجمات حقن SQL.
الاتصال بقاعدة بيانات MySQL باستخدام PHP
قبل أن نتمكن من استخدام العبارات المجهزة، يجب أولاً الاتصال بقاعدة البيانات. يمكننا القيام بذلك باستخدام MySQLi أو PDO. المثال التالي يوضح كيفية الاتصال بقاعدة البيانات باستخدام MySQLi:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
# إنشاء اتصال بقاعدة البيانات
$conn = new mysqli($servername, $username, $password, $dbname);
# التحقق من الاتصال
if ($conn->connect_error) {
die("فشل الاتصال: " . $conn->connect_error);
}
echo "تم الاتصال بقاعدة البيانات بنجاح";
?>
استخدام العبارات المجهزة مع MySQLi
يمكن استخدام العبارات المجهزة مع MySQLi لإدخال البيانات بشكل آمن وفعّال. في المثال التالي، سنوضح كيفية استخدام العبارات المجهزة لإدخال بيانات مستخدم جديد في جدول users
:
<?php
# إعداد العبارة المجهزة
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
# ربط المعلمات بالعبارة المجهزة
$stmt->bind_param("sss", $username, $email, $password);
# إعداد القيم
$username = "JohnDoe";
$email = "john@example.com";
$password = "password123";
# تنفيذ العبارة المجهزة
$stmt->execute();
# التحقق من النجاح
if ($stmt->affected_rows > 0) {
echo "تم إدخال البيانات بنجاح";
} else {
echo "حدث خطأ أثناء إدخال البيانات";
}
# إغلاق العبارة المجهزة
$stmt->close();
?>
استخدام العبارات المجهزة مع PDO
PDO يدعم العبارات المجهزة بشكل طبيعي، مما يجعل عملية الربط بين البيانات والاستعلامات أكثر سهولة وأمانًا. في المثال التالي، سنوضح كيفية استخدام العبارات المجهزة لإدخال بيانات مستخدم جديد باستخدام PDO:
<?php
# إعداد الاتصال بقاعدة البيانات باستخدام PDO
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
# إعداد نمط الخطأ
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# إعداد العبارة المجهزة
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (:username, :email, :password)");
# ربط القيم بالمعلمات
$stmt->bindParam(":username", $username);
$stmt->bindParam(":email", $email);
$stmt->bindParam(":password", $password);
# إعداد القيم
$username = "JaneDoe";
$email = "jane@example.com";
$password = "password456";
# تنفيذ العبارة المجهزة
$stmt->execute();
echo "تم إدخال البيانات بنجاح";
} catch (PDOException $e) {
echo "خطأ: " . $e->getMessage();
}
?>
فوائد استخدام العبارات المجهزة
استخدام العبارات المجهزة في PHP يوفر العديد من الفوائد:
- أمان أفضل: العبارات المجهزة تحمي من هجمات حقن SQL عن طريق فصل الاستعلامات عن البيانات.
- أداء محسّن: العبارات المجهزة أكثر كفاءة، خاصة عند تنفيذ نفس الاستعلام عدة مرات مع تغييرات طفيفة في البيانات.
- قابلية إعادة الاستخدام: يمكن استخدام العبارة المجهزة عدة مرات مع بيانات مختلفة دون الحاجة إلى إعادة كتابتها.
إغلاق الاتصال بقاعدة البيانات
بعد الانتهاء من استخدام العبارات المجهزة، من المهم إغلاق الاتصال بقاعدة البيانات لتحرير الموارد. في MySQLi، يتم إغلاق الاتصال باستخدام mysqli_close()
، بينما في PDO يتم ذلك بإسناد null
إلى متغير الاتصال.
<?php
# إغلاق الاتصال بقاعدة البيانات في MySQLi
mysqli_close($conn);
# إغلاق الاتصال بقاعدة البيانات في PDO
$conn = null;
?>
الخلاصة
استخدام العبارات المجهزة في PHP هو وسيلة فعالة لزيادة أمان وفعالية استعلامات SQL. سواء كنت تستخدم MySQLi أو PDO، تأكد من الاستفادة من العبارات المجهزة لحماية تطبيقاتك من هجمات حقن SQL وتحسين أداء قاعدة البيانات.