۸ Amir
مشکل در اجرای کد !
جامعه پی اچ پی ایجاد شده در ۲۲ بهمن ۱۴۰۱

سلام کد زیر برای من خطا میده مشکلش کجاست ؟

تو فایل BaseModel.php :

abstract class BaseModel{
    protected $db;
    protected $table;
    protected $primaryKey = 'id';
    
    public function __construct(){
        try {
            $this->db = new PDO("mysql:host=localhost;dbname=7todo;charset=utf8mb4",'root','');
        }catch (PDOException $e) {
            die("Failed To connect DB! Error : ".$e->getMessage()." in Line:".$e->getLine());
        }
    }
    public function find($id){
        $sql = "SELECT * FROM {$this->table} WHERE {$this->primaryKey}=:id";
        $stmt=$this->db->prepare($sql);
        $stmt->execute([":id"=>$id]);
        return $stmt->fetch(PDO::FETCH_OBJ);
    }
    public function Insert(array $fields,array $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);
    }
    public function Delete($id){
        $sql = "DELETE FROM {$this->table} WHERE {$this->primaryKey}=:id";
        $stmt=$this->db->prepare($sql);
        $stmt->execute([":id"=>$id]);
        return $stmt->rowCount();
    }
}

فایل User.php :

include_once "BaseModel.php";
class User extends BaseModel{
    protected $table = 'users';
}
$user = new User();
$userData = $user->Insert(['name','email','username','password'],['Amir','Amir@gmail.com','Amir',password_hash('password',PASSWORD_BCRYPT)]);
var_dump($userData);

سلام امیر جان

لطفاً از خطایی که رخ میده هم یه اسکرین شات بفرستید.

صادق برزگر ۲۳ بهمن ۱۴۰۱، ۰۷:۰۲

3360-Error.png

Amir ۲۳ بهمن ۱۴۰۱، ۰۷:۲۲

خطا به خاطر اشتباه تایپی preapare بود پیدا کردم ولی موقع که اطلاعات وارد میشه دوباره bool(false) میده ! دیتابیس رو هم چک کردم اطلاعات واردشده بود بدون مشکل ولی چرا false بهم داد ؟


Amir ۲۳ بهمن ۱۴۰۱، ۰۷:۲۶

سلام امیر عزیز

چون شما دارید fetch رو انجام میدید و کوئریتون اینزرت هست.

ریترن رو برای execute قرار بدید.

احمدرضا فاطمی کیا ۲۳ بهمن ۱۴۰۱، ۱۴:۳۰

ممنون میشه یه نمونه هم برای اپدیت مثال بزنید ؟

Amir ۲۳ بهمن ۱۴۰۱، ۱۴:۴۱
$sql"UPDATE users SET lastname='Doe' WHERE id=2";
  // Prepare statement
  $stmt = $conn->prepare($sql);
  // execute the query
  return $stmt->execute();
احمدرضا فاطمی کیا ۲۳ بهمن ۱۴۰۱، ۱۵:۳۸

همین مثال به صورت داینامیک میخواستم(مانند کوئری اینزرت بالا)

Amir ۲۳ بهمن ۱۴۰۱، ۱۶:۰۰

از این لینک نحوه داینامیک سازی استاندارد برای عملیات CRUD رو مشاهده و بررسی کنید:

https://rakepoint.com/2021/05/26/develop-php-dynamic-crud-system-with-pdo-php-data-object/

بهترین پاسخ
احمدرضا فاطمی کیا ۲۳ بهمن ۱۴۰۱، ۱۶:۴۳