PDO HATASI
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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
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();
}
işinize umarım yarar hocam
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..
return $query->fetchAll();
yerine return $query->fetch();
yaparsanız düzelecektir diye düşünüyorum hocam.