v2.5.2
Giriş yap

PDO HATASI

nycxtr
690 defa görüntülendi

Merhaba,

MVC ve PDO kullanarak bir proje geliştirmeye çalışıyorum bu iki kavrama yeni geçiş yaptım, daha öncesinde spagetti ve mysqli kullanıyordum. Yapmak istediğim ID gelen değere göre veritabanındaki değeri düzenlemek PDO şöyle bi hata alıyorum;

: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in
NOTICE: UNDEFINED INDEX: DATA IN APPLICATIONVIEWSCATEGORYEDIT.PHP ON LINE 40 Aynı zamanda şöyle bir hatada alıyorum
Edit.php sayfam

<h3 class="panel-title"><?= $params['data']['category_name'];?>Kategori Ekle</h3>

controllers içinde olan category.php sayfası

<?php
public function edit($id){
        if(!$this->sessionManager->isLogged()){helper::redirect(SITE_URL); die();}
        $data = $this->model('categoryModel')->getData($id);
        $this->render('site/header');
        $this->render('site/sidebar');
        $this->render('category/edit');
        $this->render('site/footer');
    }
    ?>

Models klasörü içinde olan categoryModel.php sayfası

<?php
public function getData($id){
        $query = $this->db->prepare("SELECT * FROM category WHERE id = ?");
        $query->execute();
        return $query->fetchAll();

    }
    ?>

Sorgum ve tablo isimleri kesinlikle doğru belki gözümden kaçmıştır hesabına phpmyadmin 'de denedim. print_r($params) şeklinde almaya çalışıyorum array boş dönüyor.

hakankorkz
1410 gün önce

Hocam Yazım yanlışınız var sanırım

sizin yazımınız


public function getData($id){
        $query = $this->db->prepare("SELECT * FROM category WHERE id = ?");
        $query->execute([$id]); ---> sanırım boyle olması gerekiyor
        return $query->fetchAll();

    }

Düzeltilmiş hali umarım işe yarar

veritabanı bağlantısını db tahmin ediyorum


public function getData($id){
        $query = $db->prepare("SELECT * FROM category WHERE id =:id");
        $query->bindParam(':id',$id,PDO::PARAM_INT) ---> Burada sql enjection koruması yaptık sadece gelen değerin id sayısa bir değer olduğunu belirtik
        $query->execute();
        return $query->fetchAll();

    }

bir de hocam nacizane tavsiyem query ile kullanıcıdan veri almak yerine prepare kullanın sql açıklarını en aza indirgersiniz..