شرح صفوف ومحتوى الفقرة
اجمع بين ربط المعاملات للقيم، والقوائم البيضاء لأسماء الأعمدة، والربط الرقمي لتقسيم الصفحات لضمان سرعة وأمان كافة استعلامات PDO.
- استخدم استعلام
COUNT(*)بنفس شروطWHEREلحساب إجمالي عدد الصفحات عبر$totalPages = (int) ceil($totalRows / $perPage). - تذكر أن تمرير مصفوفة إلى
$stmt->execute([...])يربط جميع عناصرها كنصوصPDO::PARAM_STRافتراضياً؛ لذا استخدمbindValue(..., PDO::PARAM_INT)مع أرقام التقسيم الصفحي. - لا تثق أبداً بمعاملات الرابط مثل
$_GET["sort"]أو$_GET["page"]دون فحص وتطهير.
مع وجود 45 سجلاً و10 سجلات لكل صفحة، تعطي ceil(45 / 10) إجمالي 5 صفحات، وتبدأ الصفحة الثالثة عند الإزاحة 20.
| جزء استعلام SQL | الطريقة الآمنة للتعامل مع المدخلات | الخطأ الشائع الواجب تجنبه |
|---|---|---|
WHERE col = :val | Bind via execute(["val" => $v]) | Interpolating "$v" directly into SQL |
WHERE col LIKE :q | Bind ["q" => "%$term%"] in PHP | Writing LIKE "%:q%" inside SQL string |
WHERE id IN (?, ?, ?) | Generate ? via array_fill() | Binding an array to a single IN (:ids) |
ORDER BY / LIMIT | Whitelist column; bindValue(PDO::PARAM_INT) | Binding column name as ORDER BY :col |
<?php
$totalRows = 45;
$perPage = 10;
$page = max(1, 3);
$totalPages = (int) ceil($totalRows / $perPage);
$offset = ($page - 1) * $perPage;
echo "Page $page of $totalPages | LIMIT $perPage OFFSET $offset\n";
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
اجمع بين ربط المعاملات للقيم، والقوائم البيضاء لأسماء الأعمدة، والربط الرقمي لتقسيم الصفحات لضمان سرعة وأمان كافة استعلامات PDO. استخدم استعلام COUNT(*) بنفس شروط WHERE لحساب إجمالي عدد الصفحات عبر $totalPages = (int) ceil($totalRows / $perPage). تذكر أن تمرير مصفوفة إلى $stmt->execute([...]) يربط جميع عناصرها كنصوص PDO::PARAM_STR افتراضياً؛ لذا استخدم bindValue(..., PDO::PARAM_INT) مع أرقام التقسيم الصفحي. لا تثق أبداً بمعاملات الرابط مثل $_GET["sort"] أو $_GET["page"] دون فحص وتطهير.