انتقل إلى محتوى الدرس

Building the PDO LIKE Search Endpoint بناء نقطة نهاية البحث الآمنة بـ PDO و LIKE

ابنِ محرك بحث فوري الإكمال التلقائي باستخدام PHP 8 واستعلامات PDO المحضرة بـ LIKE واستجابات JSON وتأخير الإدخال Debounce.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

داخل ملف البحث في PHP، ادمج علامتي النسبة المئوية % داخل قيمة المتغير في PHP ثم اربطه كمعامل محضر في PDO، ولا تدمج $_GET["q"] داخل نص SQL أبداً!

  • اكتب المعامل المحضر في SQL بالصورة WHERE title LIKE :term، وليس داخل علامات تنصيص '%:term%'.
  • هرّب الرمزين % و_ داخل كلمة البحث عبر addcslashes($q, "%_\\") لمنع المستخدم من إدخال أنماط بحث شاملة تبطئ الخادم.
  • اجلب الأعمدة اللازمة فقط للقائمة المنسدلة (مثل id, title, slug) بدلاً من جلب كامل الصفوف بـ SELECT *.

يحضر المثال استعلام LIKE :q عبر PDO، ويربط القيمة "%Password%" بأمان، ثم يعيد الصف المطابق بصيغة JSON.

PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec("CREATE TABLE lessons (id INT, title TEXT, slug TEXT)");
$pdo->exec("INSERT INTO lessons VALUES (85, 'PHP Password Hashing', 'php-password-hashing')");
$pdo->exec("INSERT INTO lessons VALUES (86, 'PHP CSRF Protection', 'php-csrf-protection')");

$rawQ = "Password";
$escaped = addcslashes($rawQ, '%_\\');
$stmt = $pdo->prepare("SELECT id, title, slug FROM lessons WHERE title LIKE :q LIMIT 8");
$stmt->execute([':q' => '%' . $escaped . '%']);
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)) . "\n";