-
Üyelik
28.03.2016
-
Yaş/Cinsiyet
42 / E
-
Meslek
Emlak
-
Konum
Antalya
-
Ad Soyad
İ** Y**
-
Mesajlar
112
-
Beğeniler
3 / 2
-
Ticaret
0, (%0)
Merhaba Arkadaşlar
PHP PDO da prepare verileri çekemiyorum, query ile verileri çekebiliyorum, kodlarda yaptığım her hangi bir hatamı var, mesela ikisindede Function dosyasında global $db; yi kullanmasam veriler gelmiyor, prepare ile query arasındaki fark hangisi daha güvenli, bu konuda yardımcı olabilirmisiniz
bu şekilde verileri çekebiliyorum
$veri=$db->query("Select * From bilgiler");
bu şekilde verileri çekemiyorum
$veri=$db->prepare("Select * From bilgiler");
-
Üyelik
02.08.2019
-
Yaş/Cinsiyet
23 / E
-
Meslek
Öğrenci
-
Konum
Kahramanmaraş
-
Ad Soyad
A** K**
-
Mesajlar
164
-
Beğeniler
41 / 54
-
Ticaret
0, (%0)
Prepare ettikten sonra execute(işlemek) edip fetch(çekmek) atmanız lazım.
Mesela;
//Sorguyu hazırladık
$veri=$db->prepare("SELECT * FROM bilgiler");
//Sorguyu işledik
$veri->execute();
//MySQL'in döndürdüğü verileri çektik
$sonuc = $veri->fetchAll();
Veya
//Sorguyu hazırladık
$veri=$db->prepare("INSERT INTO bilgiler (isim,soyisim) VALUES (:isim, :soyisim)");
//Verileri yükleyip işledik
$veri->execute(array(':isim' => 'Ahmet', ':soyisim' => 'Kucukonder'));
-
Üyelik
28.03.2016
-
Yaş/Cinsiyet
42 / E
-
Meslek
Emlak
-
Konum
Antalya
-
Ad Soyad
İ** Y**
-
Mesajlar
112
-
Beğeniler
3 / 2
-
Ticaret
0, (%0)
Hocam verdiğin bilgiler için çok teşekkür ederim,
Hocam her açtığım function da neden global $db; kullanmak zorunda kalıyorum, bunun daha farklı kullanım şekli olabilirmi?, birde aşağıdaki yaptığım kodlamalar doğrumudur Hocam
çok teşekkür ederim.
1===
$db->prepare("Delete From ilanresim Where code='' && ilanid='0'");
$db->execute();
$db->prepare("Update ilanresim Set code='' ,ilanid='$icerikid' Where code='$ilanKodu'");
$db->execute();
$db->prepare("Delete From ilanresim Where code!='' && ilanid='0'");
$db->execute();
2===
$db->prepare("INSERT INTO 'dopingsiparis'('kulid','ilanid','odemeyontemi') VALUES ('$ekleyen','$icerikid','$odemeyontemi')");
$siparisid = $db->lastInsertId();
3===
if($ekle)
$icerikid=$icerikid==0 ? lastInsertId() : $icerikid;
$say++;
}else{
$return['bildirim'].= danger("Eklenirken Bir Hata Oluştu.");
}
Hocam mysql_insert_id(); yerine lastInsertId(); kulanabilirmiyim
-
Üyelik
02.08.2019
-
Yaş/Cinsiyet
23 / E
-
Meslek
Öğrenci
-
Konum
Kahramanmaraş
-
Ad Soyad
A** K**
-
Mesajlar
164
-
Beğeniler
41 / 54
-
Ticaret
0, (%0)
$db->prepare("Delete From ilanresim Where code='' && ilanid='0'");
$db->execute();
$db->prepare("Update ilanresim Set code='' ,ilanid='$icerikid' Where code='$ilanKodu'");
$db->execute();
$db->prepare("Delete From ilanresim Where code!='' && ilanid='0'");
$db->execute();
//Bu gibi veri göndermediğiniz sorgularda direkt "query" fonksiyonunu kullanabilirsiniz.
$sorgu = $db->query("Delete From ilanresim Where code='' && ilanid='0'");
//Ancak sorgu içerisinde bir şeyler eklenecekse (değişkenden vs. veri çekilecekse) prepare yöntemini kullanın.
//Verileri direkt değişkenden almak yerine execute sırasında veya öncesinde array ile eklemenizi öneririm.
$sorgu = $db->prepare("INSERT INTO 'dopingsiparis'('kulid','ilanid','odemeyontemi') VALUES (':ekleyen',':icerikid',':odemeyontemi')");
//YONTEM 1
$sorgu->execute(array(':ekleyen' => $ekleyen, ':icerikid' => $icerikid, 'odemeyontemi' => $odemeyontemi));
//YONTEM 2
$sorgu->bindValue(':ekleyen', $ekleyen, PDO::PARAM_STR);
$sorgu->bindValue(':icerikid', $icerikid, PDO::PARAM_INT);
$sorgu->bindValue(':odemeyontemi', $odemeyontemi, PDO::PARAM_STR);
$sorgu->execute();
$siparisid = $db->lastInsertId(); //Eklediğiniz gibi son idyi bu şekilde çekebilirsiniz.
//1- Köşeli parantez eksik
//2- lastInsertId - fonksiyon yazımı doğru fakat kullanımı yanlış.
//Hangi veritabanı bağlantısından hangi tablonun son idsini alacaksınız?
if($ekle)
$icerikid = $icerikid==0 ? lastInsertId() : $icerikid;
$say++;
}else{
$return['bildirim'].= danger("Eklenirken Bir Hata Oluştu.");
}
//Düzenlenmiş
if($ekle){
$sonId = $db->lastInsertId();
$icerikid = $icerikid==0 ? $sonId : $icerikid;
Fonksiyonlar kendi içlerinde yeni bir kod bloğu oldukları için global kullanmak kaçınılmaz oluyor
$test = "Merhaba dünya!";
function MyFunc(){
global $test;
echo $test;
}
MyFunc();
//Çıktı:
Merhaba dünya!
-
Üyelik
28.03.2016
-
Yaş/Cinsiyet
42 / E
-
Meslek
Emlak
-
Konum
Antalya
-
Ad Soyad
İ** Y**
-
Mesajlar
112
-
Beğeniler
3 / 2
-
Ticaret
0, (%0)
Evet Hocam,
Cevap için çok teşekkür ederim, hata verdi Hocam
Recoverable fatal error: Object of class PDOStatement could not be converted to string in
hatayı bu kodda gösteriyor Hocam
$ilancek = $db->query($sorgu.' LIMIT '.$limit.', '.$sayfada);
-
Üyelik
02.08.2019
-
Yaş/Cinsiyet
23 / E
-
Meslek
Öğrenci
-
Konum
Kahramanmaraş
-
Ad Soyad
A** K**
-
Mesajlar
164
-
Beğeniler
41 / 54
-
Ticaret
0, (%0)
//Sorguyu değişkenlerden çekmek yerine el ile yazın.
$ilancek = $db->prepare('SELECT * FROM user LIMIT :limit,:sayfa');
$ilancek->bindValue(':limit', $limit, PDO::PARAM_INT);
$ilancek->bindValue(':sayfa', $sayfada, PDO::PARAM_INT);
$ilancek->execute();
while($ilan=$ilancek->fetchAll(PDO::FETCH_ASSOC)){
-
Üyelik
02.08.2019
-
Yaş/Cinsiyet
23 / E
-
Meslek
Öğrenci
-
Konum
Kahramanmaraş
-
Ad Soyad
A** K**
-
Mesajlar
164
-
Beğeniler
41 / 54
-
Ticaret
0, (%0)
$sorgu değişkeninin işlemden işleme değişiklik gösterdiğini ve direkt sorgu yaptığını düşünüyordum, böyle olduğunu bilsem hiç uğraşmazdık :)
Önce sorgu değişkenindeki sorgu fonksiyonlarını kaldıralım, sadece "string" değişkeni olsun.
$sorgu = "Select id,baslik,fiyat,icerikid,seflink,eklenmeTarihi,metrekare,(Select baslik From muh_iller Where muh_iller.id=ilan.ilid)as ilBaslik,(Select baslik From muh_ilceler Where muh_ilceler.id=ilan.ilceid)as ilceBaslik,(Select baslik From ilan_durum Where (ilan_durum.id=ilan.durumid || ilan_durum.icerikid=ilan.durumid) && ilan_durum.dil='".seciliDil."')as ilanDurum,(Select d1.durum From dopingsiparisler d1,dopingsiparislerdetaylari d2 Where (d1.ilanid=ilan.id || d1.ilanid=ilan.icerikid) && d1.odemedurum='1' && d1.durum='1' && d2.siparisid=d1.id && d2.dopingturu='2' && d2.bitisTarihi > '".date("Y-m-d H:i:s")."')as ustsiradoping ,(Select d1.durum From dopingsiparisler d1,dopingsiparislerdetaylari d2 Where (d1.ilanid=ilan.id || d1.ilanid=ilan.icerikid) && d1.odemedurum='1' && d1.durum='1' && d2.siparisid=d1.id && d2.dopingturu='5' && d2.bitisTarihi > '".date("Y-m-d H:i:s")."')as dopingrenkliarkaplan From ilan Where dil='".seciliDil."' && onay='1' && ilandurum='1' $aramaSorgusu $siralamaSorgusu";
Sorgu değişkenindeki string veriyi buraya atıp ekstra değer ekledikten sonra postlayalım.
//ILANCEK DEĞİŞKENİ VE WHİLE DÖNGÜSÜ
$ilancek = $db->query($sorgu.' LIMIT '.$limit.', '.$sayfada);
while($ilan = $ilancek){
Eğer bu $sorgu değişkeni sadece $ilancek değişkeninde kullanılıyorsa farklı fonksiyonlarla daha stabil hale getirilebilir ancak farklı sorgularda da kullanılıyorsa uğraştırıcı bir iş olur ve uğraşmaya değmez.