شنبه یه خبراییه 🔥 منتظر شنبه باش 😉🥳
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ محمدجوکار
چطور باید کوئری INSERT رو به طور داینامیک نوشت؟؟؟
جامعه پی اچ پی ایجاد شده در ۱۹ دی ۱۴۰۱

سلام و احترام

اینطور که مشخصه، ما باید برای هر مقدار ستونی که جدولمون داشته باشه، متغیر بریزیم توی فانکشن insert و جدای از این،‌ باید برای مقادیرشم به همون تعداد، به ترتیب، ورودی بگیره.. خب اینطوری که نمیشه!!!!

نمیشه پویا درستش کرد که همه جا کارایی داشته باشه که.. یهو تیبل یوزر ما، چهار تا ستون داره، ولی تیبل مثلا فولدرهای ما شیش‌تا. خب این عدم تطابق رو باید چکار کرد؟

راهی هست؟؟؟؟؟یا من درست متوجه نشدم این موضوع رو؟

732c-Screenshot (579).png

چون کوئریم کپی از بالا بوده ریترن داخلشه.. در نظر نگیرید

محمدجوکار ۱۹ دی ۱۴۰۱، ۲۱:۳۸

سلام محمد جان

روش‌های مختلفی برای اینکار وجود داره

روش اول: یک آرایه به عنوان ورودی متد insert دریافت کنید که ایندکس آرایه، فیلدهای جدول موردنظرتون باشه و مقدارهای اون آرایه هم که برای ثبت در جدول موردنظرتون میخواید باشه هست. با استفاده از چند تابع php کوئری موردنیاز رو بسازید. مثال:

public function insert($data) {
    $keys = array_keys($data);
    $values = array_values($data);
    
    $bindKeys = array_map(function($item) {
        return ":{$item}";
    }, $keys);
    $bindData = array_combine($bindKeys, $values);
    
    $sqlFields = implode(', ', $keys);
    $sqlValues = implode(', ', $bindKeys);
    $query = "INSERT INTO {$this->table} ({$sqlFields}) VALUES ({$sqlValues})";
    $stmt = $this->db->perpare($query);
    $stmt->execute($bindData);
    return $stmt->fetch(PDO::FETCH_OBJ);
}

روش دوم: یک آرایه به عنوان فیلدهای جدول و یک آرایه به عنوان مقدارها به عنوان ورودی‌های متد insert دریافت کنید و شبیه به روش اول کوئری موردنیاز رو بسازید. مثال:

public function insert($fields, $values) { 
    $bindFields = array_map(function($item) {
        return ":{$item}";
    }, $fields);
    $bindData = array_combine($bindFields, $values);
    
    $sqlFields = implode(', ', $fields);
    $sqlValues = implode(', ', $bindFields);
    $query = "INSERT INTO {$this->table} ({$sqlFields}) VALUES ({$sqlValues})";
    $stmt = $this->db->perpare($query);
    $stmt->execute($bindData);
    return $stmt->fetch(PDO::FETCH_OBJ);
}

البته روش‌های دیگه ای هم میشه پیاده کرد، بستگی به خودتون داره که میخواهید چطور پیش برید و استفاده کنید.

موفق باشید.

بهترین پاسخ
صادق برزگر ۲۰ دی ۱۴۰۱، ۰۸:۱۲