اذهب إلى المحتوى

السؤال

نشر

كنت أعمل على مشروع To-do list بلغة PHP وعند تطوير ميزة تصفية المهام بناءًا على حالتها مثل قيد التنفيذ أو مكتملة وهكذا، وكتبت الكود التالي:

  public static function get($table, $where = null)
    {
        $queryStr = "SELECT * FROM {$table}";
        if(is_array($where)) {
            $queryStr .= " WHERE " . implode(' ', $where);
        }

        $query= self::$pdo->prepare($queryStr);
        return $query->fetchAll(\PDO::FETCH_OBJ);
    }

ولكن اختفت كل المهمام، فما المشكلة، أرفقت مجلد المشروع.

php.zip

Recommended Posts

  • 0
نشر

المشكلة في طريقة إضافة الشرط (WHERE clause) إلى الاستعلام و ليست آمنة.

عند استخدام implode() سيتم إضافة الشروط دون علامات الاقتباس مما يجعل الاستعلام غير صالح. 

الحل هو استخدام طريقة أخرى لإضافة الشرط مثل:

$where = '1=1'; // دائما TRUE 
if(is_array($where_conditions)) {
  $where_parts = [];
  foreach($where_conditions as $field => $value) {
    $where_parts[] = "{$field} = '{$value}'"; 
  }
  $where .= ' AND ' . implode(' AND ', $where_parts);
}

$queryStr = "SELECT * FROM {$table} WHERE {$where}";

هذا التعديل يضيف تكوينًا صحيحًا للشرط في حالة وجود مصفوفة لتصفية المهام.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...