Neler Yeni

Php veritabanından primary key ile tek değer çekme işlemi nasıl yapılıyor?

Katılım
15 Nisan 2020
Mesajlar
32
Dahası  
Reaksiyon skoru
8
Konum
Malatya
İsim
mustafa sansar
Öncelikle selamlar.
Veritabanımda bir alan tanımladım primary Key olarak birinci alana ID 1 ikinci alana ise ID 2 olarak verdim.
Ben normalde oto increase kullanıyordum fakat burada insert into işlemi değil sadece düzenleme işlemi kullanacağım için bu sefer kullanmayıp manuel olarak primary Key tanımladım. Soruma gelecek olursak normalde değerleri çekerken foreach kullanarak çekiyordum ama burada tek tek çekmek istiyorum.

Örneğin:
$cek = $db->prepare("SELECT * FROM formlar WHERE id =:id");
$cek->bindValue(":id", 1, PDO::pARAM_INT);
$cek->execute();

Bunu siteme yazdıramıyorum
İlgili <div><?= $cek["baslik"]; ?></Div>

Bu şekilde yazıyordum. Teşekkürler şimdiden.
 
Katılım
3 Mayıs 2020
Mesajlar
407
En İyi Cevap
2
Dahası  
Reaksiyon skoru
206
İsim
Bedirhan SAMSA
Instagram
bedirhansamsa
Steam
Bedirhaaan
Twitter
bedirhansamsa
Facebook
bedirhansamsa34
Sorunu ben tam olarak anlayamadım açıklar mısın tekrardan?
 
Katılım
15 Nisan 2020
Mesajlar
32
Dahası  
Reaksiyon skoru
8
Konum
Malatya
İsim
mustafa sansar
  • Konu Sahibi Konu Sahibi
  • #3
Sorunu ben tam olarak anlayamadım açıklar mısın tekrardan?
normalde veritabanından değerleri çekerken while ya da foreach döngüsü ile çekiyorduk ya örneğin veritabanı şu şekilde olsun:
id baslik aciklama
1 baslik1 aciklama1
2 baslik3 aciklama2
3 baslik3 aciklama3

ben sadece id si 3 olanı çekip divin içerisine baslik3 ve aciklama3 ü yazdırmak istiyorum.
 
Katılım
26 Mayıs 2020
Mesajlar
1
Dahası  
Reaksiyon skoru
0
İsim
ali ihsan şen
PHP:
<?php
############################ QUERY ÖRNEĞİ ############################
$stmt = $db->query('SELECT * FROM formlar WHERE id=1 limit 1'); // formlar tablosundan sadece id'si 1 olan veriyi alırsınız execute etmeniz gerek olmaz. query methodu herhangi bir dışarıdan parametre almıyor iseniz kullanılabilir. limit ise sadece 1 veri alacağımız için yazdık limit ile dönen satır sayısını limitleriz. bu örnekte zaten yalnızca 1 veri döneceği için yazmaya da biliriz.
$form_verisi = $stmt->fetch(PDO::FETCH_ASSOC); // sadece 1 veri alacağımız için fetch kullandık. verimizi "form_verisi" değişkenine atayarak associative array formatında almış olduk.
print_r($form_verisi); // sql sorgusundan dönen verilerin çıktısını dump tarzında çıktısını aldık.

############################ EXECUTE ÖRNEĞİ ############################

$stmt = $db->prepare('SELECT * FROM formlar WHERE id=? limit 1'); // formlar tablosundan bir alt satırdaki execute methodu içerisinde array olarak verilecek olan parametreler ile sql kodumuz çalışacaktır. her soru işareti yerine bir parametre gelmesi gerekmektedir. sql sorgumuzda sadece 1 soru işareti olduğu için execute methodu içerisinde yalnızca 1 parametre vereceğiz. bu satır sql kodunun çalışmasına bir hazırlık aşaması olarak düşünülebilir. execute methodu çalışana kadar sql sorgumuz sql sunucumuza ulaşmayacaktır.
$stmt->execute([$_GET["id"]]); // tarayıcıdan get methoduyla ile id adında bir parametre aldık ve bunu execute içerisindeki arrayimize yerleştirdik. bu bağlamda tarayıcı vasıtasıyla verdiğimiz id parametresinin aldığı değeri sql sorgusunda "id=?" olan kısımdaki soru işareti yerine yansıtacaktır ve sorgu bu satırda sql sunucusuna ulaşacaktır.
$form_verisi = $stmt->fetch(PDO::FETCH_ASSOC); // sadece 1 veri alacağımız için fetch kullandık. verimizi "form_verisi" değişkenine atayarak associative array formatında almış olduk.
print_r($form_verisi); // sql sorgusundan dönen verilerin çıktısını dump tarzında çıktısını aldık.

############################ BINDVALUE ÖRNEĞİ ############################

// varsayalım daha spesifik bir sql sorgusu yazmak istiyoruz aynı zamanda prepare methodu ile sql injection açıklarından da kaçınmak istiyoruz. bu bağlamda bindvalue zaman zaman hayat kurtarabilir. aşağıdaki örneği inceleyelim.

$stmt = $db->prepare('SELECT * FROM formlar WHERE id=? limit ?'); // gördüğünüz üzere 2 adet soru işareti bulunan bir sql sorgusu. 2 adet de execute içerisinde parametre girmemiz gerekiyor. fakat burada önceki örneklerden farklı bir nokta mevcut. id yerine execute ile biz pdo tarafından ister string ister int dönelim mysql sunucuna ulaşan daha her zaman bir string olacak. yani kenarlarında '' bu şekilde tırnaklar olacaktır sql sunucusuna ulaşan id parametremizin. id için her ne kadar sql sunucumuzda tanımlı veri tipimiz int olsa da mysql bunu sorun yapmadan girdiğimiz sorgunun sonucunu tarafımıza yansıtır. fakat aynı durum limitde de geçerli değildir. mutlaka bir int değer verilmesi gerekir pdo tarafından bu noktada biz pdo'ya girdiğimiz değerin int olduğunu belirtmemiz şarttır. bu yüzden bindvalue'ye ihtiyaç duyuyoruz.
$stmt->bindValue(1, $_GET["id"], PDO::PARAM_INT); // tarayıcıdan id parametresini aldık bindvalue ile int olarak sql sorgumuza yerleştirdik. PDO::PARAM_INT ise tarayıcıdan gelen id parametresinin int bir değer olduğu dışında tırnaklar olmadan sql sunucuna yollanması gerektiğini bildirir. 1 rakamı ise sırayla ilk soru işareti 1 olarak belirtilir. aşağıdaki örnekte ise 2, 2. sırada olan limiti işaret eder.
$stmt->bindValue(2, $_GET["limit"], PDO::PARAM_INT); // tarayıcıdan limit parametresini aldık bindvalue ile int olarak sql sorgumuza yerleştirdik.
$stmt->execute(); // bir array içerisinde herhangi bir parametre belirtmeden doğrudan execute methodumuzu çalıştırdık parametreleri bindvalue ile vermiş olduk.
$form_verisi = $stmt->fetchAll(PDO::FETCH_ASSOC); // bu örnekte limit ve id ile sorguyu kısıtlayarak yalnızca 1 row'a ulaşacak olsak da, birden fazla veri almamız gerektiğini varsayarsak fetchall methodunu kullanmamız gerekiyordu.
print_r($form_verisi); // sql sorgusundan dönen verilerin çıktısını dump tarzında çıktısını aldık.

biraz hızlıca yazdım. aldığınız bir hata, anlamadığınız bir nokta varsa yazınız elimden geldiğince yardımcı olmaya çalışırım.
 
Son düzenleme:
Top Bottom