lostyazilim
tr.link

PDO global, prepare ve query hatası

20 Mesajlar 3.187 Okunma
lstbozum
tr.link

emlak48 emlak48 WM Aracı Kullanıcı
  • Ü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");
 

 

wmaraci
reklam

capscroll capscroll WM Aracı Kullanıcı
  • Ü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'));
 

 

emlak48 emlak48 WM Aracı Kullanıcı
  • Ü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
 

 

capscroll capscroll WM Aracı Kullanıcı
  • Ü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!
 

 

wmaraci
wmaraci

emlak48 emlak48 WM Aracı Kullanıcı
  • Üyelik 28.03.2016
  • Yaş/Cinsiyet 42 / E
  • Meslek Emlak
  • Konum Antalya
  • Ad Soyad İ** Y**
  • Mesajlar 112
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)
çok sağol Hocam ALLAH razı olsun, Hocam aşağıdaki kodu PDO çevirmeye çalıştım ama bir türlü çeviremedim kalın olarak işaretlediğim yerde hata veriyor, bu konudada yardımcı olurmusun hocam.
teşekkür ederim


$sayfada = $gostermeAdeti;
$toplam_icerik = mysql_num_rows(mysql_query($sorgu));
$toplam_sayfa = ceil($toplam_icerik / $sayfada);
$sayfa = isset($_GET['s']) ? (int) $_GET['s'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;
$limit = ($sayfa - 1) * $sayfada;
if($limit<0){$limit=0;}

$ilancek=mysql_query($sorgu.' LIMIT '.$limit.', '.$sayfada)or logal(mysql_error());
while($ilan=mysql_fetch_object($ilancek)){
?>

içerikler


 

 

capscroll capscroll WM Aracı Kullanıcı
  • Ü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)

emlak48 adlı üyeden alıntı

çok sağol Hocam ALLAH razı olsun, Hocam aşağıdaki kodu PDO çevirmeye çalıştım ama bir türlü çeviremedim kalın olarak işaretlediğim yerde hata veriyor, bu konudada yardımcı olurmusun hocam.
teşekkür ederim


$sayfada = $gostermeAdeti;
$toplam_icerik = mysql_num_rows(mysql_query($sorgu));
$toplam_sayfa = ceil($toplam_icerik / $sayfada);
$sayfa = isset($_GET['s']) ? (int) $_GET['s'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;
$limit = ($sayfa - 1) * $sayfada;
if($limit<0){$limit=0;}

$ilancek=mysql_query($sorgu.' LIMIT '.$limit.', '.$sayfada)or logal(mysql_error());
while($ilan=mysql_fetch_object($ilancek)){
?>

içerikler



Hatırladığım kadarıyla siteyi PDO'ya çeviriyordunuz, rowcount gibi diğer kodları da düzenledim.

//Buraya "query" sorgunuzu yazın.
//Eğer sorguya veri yükleyecekseniz 'query' yerine 'prepare/execute' mantığını kullanın.
$sorgu = $db->query("MYSQL SORGUSU");
$sayfada = $gostermeAdeti;
$toplam_icerik = $sorgu->rowCount();
$toplam_sayfa = ceil($toplam_icerik / $sayfada);
$sayfa = isset($_GET['s']) ? (int) $_GET['s'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;
$limit = ($sayfa - 1) * $sayfada;

//IF-ELSE'de tek satırlık işlem yapacaksanız köşeli parantez eklemenize gerek yok.
if($limit<0) $limit=0;

$ilancek = $db->query($sorgu.' LIMIT '.$limit.', '.$sayfada);
while($ilan=$ilancek->fetch(PDO::FETCH_OBJ)){
?>
 

 

emlak48 emlak48 WM Aracı Kullanıcı
  • Ü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);
 

 

capscroll capscroll WM Aracı Kullanıcı
  • Ü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)){
 

 

emlak48 emlak48 WM Aracı Kullanıcı
  • Ü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 dediğini nasıl başaracağımı bilemiyorum, kodlarım aşağıdaki gibi, yardım edersen çok iyi olur,
çok teşekkürler



if(isset($_COOKIE['adet'])){
$gostermeAdeti=temizle($_COOKIE['adet']);
}else{
$gostermeAdeti="9";
}
if(isset($_COOKIE['siralama'])){
$siralama=temizle($_COOKIE['siralama']);
if($siralama=="1"){
$siralamaSorgusu="Order by ustsiradoping DESC,fiyat DESC";
}else if($siralama=="2"){
$siralamaSorgusu="Order by ustsiradoping DESC,fiyat ASC";
}else if($siralama=="3"){
$siralamaSorgusu="Order by ustsiradoping DESC,eklenmeTarihi DESC";
}else if($siralama=="4"){
$siralamaSorgusu="Order by ustsiradoping DESC,eklenmeTarihi ASC";
}else{
$siralamaSorgusu="Order by ustsiradoping DESC,id DESC";
}
}else{
$siralamaSorgusu="Order by ustsiradoping DESC, id DESC";
}
if(isset($_POST['aramayap'])){
$kelime=temizle(@$_POST['kelime']);
$durumid=temizle(@$_POST['durumid']);
$turid=temizle(@$_POST['turid']);
$bulundugukatid=temizle(@$_POST['bulundugukatid']);
$konuttipi=temizle(@$_POST['konuttipi']);
$ilid=temizle(@$_POST['ilid']);
$ilceid=temizle(@$_POST['ilceid']);
$semtid=temizle(@$_POST['semtid']);
$minfiyat=temizle(@$_POST['minfiyat']);
$maxfiyat=temizle(@$_POST['maxfiyat']);
$minm2=temizle(@$_POST['minm2']);
$maxm2=temizle(@$_POST['maxm2']);
$ilanTarihi=temizle(@$_POST['ilanTarihi']);
$videoluilanlar=temizle(@$_POST['videoluilanlar']);
$aramaSorgusu="";
if(!empty($kelime)){
$aramaSorgusu.="&& (baslik like'%$kelime%' || ilankodu='$kelime')";
}
if(!empty($durumid)){
$aramaSorgusu.="&& durumid='$durumid'";
}
if(!empty($turid)){
$aramaSorgusu.="&& turid='$turid'";
}
if(!empty($bulundugukatid)){
$aramaSorgusu.="&& bulundugukatid='$bulundugukatid'";
}
if(!empty($konuttipi)){
$aramaSorgusu.="&& konuttipi='$konuttipi'";
}
if(!empty($ilid)){
$aramaSorgusu.="&& ilid='$ilid'";
if(!empty($ilceid)){
$aramaSorgusu.="&& ilceid='$ilceid'";
if(!empty($semtid)){
$aramaSorgusu.="&& semtid='$semtid'";
}
}
}
if(!empty($minfiyat)){
$aramaSorgusu.="&& fiyat>'$minfiyat'";
}
if(!empty($maxfiyat)){
$aramaSorgusu.="&& fiyat<'$maxfiyat'";
}
if(!empty($minm2)){
$aramaSorgusu.="&& metrekare>='$minm2'";
}
if(!empty($maxm2)){
$aramaSorgusu.="&& metrekare<='$maxm2'";
}
if(!empty($ilanTarihi)){
if($ilanTarihi=="1"){
$tarih=date("Y-m-d");
$aramaSorgusu.="&& eklenmeTarihi like'$tarih %'";
}elseif($ilanTarihi=="2"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-3 day'));
$aramaSorgusu.="&& eklenmeTarihi> '$tarih2'";
}elseif($ilanTarihi=="3"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-1 week'));
$aramaSorgusu.="&& eklenmeTarihi> '$tarih2'";
}elseif($ilanTarihi=="4"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-2 week'));
$aramaSorgusu.="&& eklenmeTarihi > '$tarih2'";
}elseif($ilanTarihi=="5"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-3 week'));
$aramaSorgusu.="&& eklenmeTarihi > '$tarih2'";
}elseif($ilanTarihi=="6"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-1 months'));
$aramaSorgusu.="&& eklenmeTarihi > '$tarih2'";
}elseif($ilanTarihi=="7"){
$tarih1=date("Y-m-d H:m:i");
$tarih2= date('Y-m-d H:m:i', strtotime('-2 months'));
$aramaSorgusu.="&& eklenmeTarihi > '$tarih2'";
}
}
if($videoluilanlar=="1"){
$aramaSorgusu.="&& video!=''";
}
}else{
$aramaSorgusu="";
}
$baslik=dil("İlanlar");
$sorgu = $db->prepare("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");
$sayfada = $gostermeAdeti;
$toplam_icerik = $sorgu->fetchColumn();
$toplam_sayfa = ceil($toplam_icerik / $sayfada);
$sayfa = isset($_GET['s']) ? (int) $_GET['s'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;
$limit = ($sayfa - 1) * $sayfada;
if($limit<0){$limit=0;}

$ilancek = $db->prepare($sorgu.' LIMIT '.$limit.', '.$sayfada);
while($ilan = $ilancek->fetch(PDO::FETCH_OBJ)){
?>
İçerikler


 

 

capscroll capscroll WM Aracı Kullanıcı
  • Ü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.
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al