شرح صفوف ومحتوى الفقرة
داخل ملف البحث في 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";