v2.5.2
Giriş yap

Category Url'imi Nasıl Alabilirm?

ilkertuncer
322 defa görüntülendi

Merhabalar. Ben mevcut konumun category_id sini çektirebilecek bir fonksiyona sahibim. İstiyorum ki çektirdiğim konunun kategorisinin id si yanında bir de category_url ini çektireyim.
Kısaca çektirdiğim categorinin category_url ini de aldırmak istiyorum da diyebiliriz.
Nasıl Yapabilirim?

Kodum:

    function Get_url($url){
    $veri=[];

    $datas = $db->prepare('SELECT * FROM posts WHERE url = ?');
    $datas->execute([$url]);
    $data = $datas->fetch(PDO::FETCH_ASSOC);

    foreach($data as $key=>$value){
    $datas = $db->prepare('SELECT * FROM categories WHERE id = ?, category_url = ?');
    $datas->execute([$value['id']], [$value['category_url']]);
    $veri[] = $datas->fetch(PDO::FETCH_ASSOC);

    }

    }
Cevap yaz
Cevaplar (3)
ilkertuncer
704 gün önce

Merhabalar @ebykdurmus. Size ulaşabileceğim bir mail adresiniz mevcut mudur acaba?

ilkertuncer
704 gün önce

merhabalar @ebykdrms . Parse error: syntax error, unexpected '"', expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\ilkertuncer.com\blog\page.php on line 13
hatasını almaktayım neden yaknaklı olabilir?

ebykdrms
704 gün önce

SELECT * FROM categories WHERE id = ? sorgunuz yeterli olmalı.
Eğer categories tablonuzda category_id diye bir sütununuz varsa bu zaten dönecektir.

Veritabanına döngü içinde çok sayıda istek atmamanızı öneririm. Nasıl bir istek atacaksanız onu PHP ile kurgulayıp veritabanından tek seferde cevap almaya çalışmanız veritabanını daha az yoracaktır.
Aşağıdaki örnekte 4 kategoriniz varmış gibi düşünelim.
Veritabanına foreach içinde istek atmayı kaldırdığımız için veritabanına 4 kez istek atmak yerine sadece 1 kez istek atabilecek hale getirmiş oluyoruz. posts tablosuna attığımız istekle birlikte 5 yerine 2 istekte veritabanından sonuçlarımızı alabiliyoruz.

 function getUrl($url){
    global $db;
 
    $query = $db->prepare('SELECT * FROM posts WHERE url = ?');
    $query->execute([$url]);
    $data = $query->fetch(PDO::FETCH_ASSOC);
    
    $idValues = [];
    foreach($data as $dataItem) $idValues[] = "id = $dataItem["id"]";
    // $idValues dizisi içinde şuna benzer bir veri oluştu: ["id=1", "id=2", "id=4", "id=12"]
    
    $idValues = implode(" OR ", $idValues);
    // $idValues şu string'e döndü: "id=1 OR id=2 OR id=4 OR id=12"
    
    $query = $db->prepare("SELECT * FROM categories WHERE $idValues");
    $query->execute();
    $categories = $query->fetchAll();

    return $categories;
}

$cats = getUrl("url verisi");
echo "ilk category_id verisi: ".$cats[0]->category_id;

Aslında daha da ileri gidip tek sorguda iki tabloyu birleştirerek sonuç almak en güzel.