Nasıl düzgün bir Select sorgusu için bir PDO nesnesi kullanabilirsiniz

4 Cevap php

I Select sorguları yapmak için PHP.net talimatları denedim ama bunu hakkında gitmek için en iyi yolu, emin değilim.

Ben mümkünse name alan parametresini eşleşen bir tablo ID geri dönmek için, bir parametreli Select sorgusu kullanmak istiyorum. Benzersiz olacak, çünkü bu bir ID dönmelidir.

Daha sonra başka bir tabloya bir Insert için o ID kullanmak istiyorum, bu yüzden başarılı ya da değil ben belirlemek gerekir.

Ben de yeniden kullanım için sorguları hazırlayabilirsiniz okumak ama bu nasıl yardımcı emin değildi.

4 Cevap

Bu gibi verileri seçin:

$db = new PDO("...");
$statement = $db->prepare("select id from some_table where name = :name");
$statement->execute(array(':name' => "Jimbo"));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator

Siz aynı şekilde yerleştirin:

$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));

Ben hata üzerine istisnalar atmak PDO'yu yapılandırmanız önerilir. Sorgulardan herhangi başarısız olursa o zaman bir PDOException alacağı - açıkça kontrol gerek yok. Istisnalar açmak için, $db nesnesi oluşturduktan hemen sonra bu çağrı:

$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Ben son zamanlarda PDO ile çalışıyoruz ve yukarıdaki cevabı tamamen doğru, ama sadece aşağıdaki gibi iyi çalıştığını belgelemek istedim.

$nametosearch = "Tobias";
$conn = new PDO("server", "username", "password");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name");
$sth->bindParam(':name', $nametosearch);
// Or sth->bindParam(':name', $_POST['namefromform']); depending on application
$sth->execute();

Bir litle bit tam cevap kullanıma tüm hazır ile burada:

    $sql = "SELECT `username` FROM `users` WHERE `id` = :id";
    $q = $dbh->prepare($sql);
    $q->execute(array(':id' => "4"));
    $done= $q->fetch();

 echo $done[0];

İşte $dbh PDO db konnektör, ve id fom tabloya dayalı users biz elde ettik username {kullanarak [(4) }]

Ben bu yardım birisi, Enjoy umut!

You can use the bindParam or bindValue methods to help prepare your statement. It makes things more clear on first sight instead of doing $check->execute(array(':name' => $name)); Especially if you are binding multiple values/variables.

Aşağıdaki örnek okumak için açık, kolay kontrol edin:

$check = $db->prepare("SELECT id FROM table WHERE name = :name LIMIT 1");
$check->bindValue(':name', 'name');
$check->execute();
$check = $check->fetch(PDO::FETCH_ASSOC);

if (!empty($check)){
    $row_id = $check['id'];
    // do something
}

Eğer bekliyoruz multiple rows LIMIT 1 çıkarın ve içine getirme yöntemini değiştirmek fetchAll:

$check = $db->prepare("SELECT id FROM table WHERE name = :name"); // removed limit 1
$check->bindValue(':name', 'name');
$check->execute();
$check = $check->fetchAll(PDO::FETCH_ASSOC);

if (count($check) > 0){
    $row_id = $check['id'];
    // do something
}