85 votes

Comment puis-je utiliser correctement un objet PDO pour une requête Select

J'ai essayé de suivre le PHP.net instructions pour le faire Select des requêtes, mais je ne suis pas sûr de la meilleure façon d'aller à ce sujet.

Je voudrais utiliser un paramétrée Select de la requête, si possible, de retourner l' ID dans un tableau où l' name champ correspond au paramètre. Ceci doit retourner un ID , car il sera unique.

Je voudrais ensuite utiliser qu' ID d'un Insert dans une autre table, je vais donc besoin de savoir si c'est réussi ou pas.

J'ai aussi lu que vous pouvez préparer les requêtes pour les réutiliser, mais je n'étais pas sûr de savoir comment cela peut vous aider.

158voto

troelskn Points 51966

Vous sélectionnez les données comme ceci:

$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

Vous insérer de la même manière:

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

Je vous recommande de configurer PDO pour lancer des exceptions à l'erreur. Il vous faudra alors obtenir un PDOException si les requêtes échouent - Pas besoin de vérifier explicitement. Pour activer les exceptions, appelez cela juste après que vous avez créé l' $db objet:

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

16voto

SmashCode Points 753

J'ai travaillé avec PDO ces derniers temps, et la réponse ci-dessus est complètement à droite, mais je voulais juste que les œuvres suivantes.

$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();

12voto

Gillian Lo Wong Points 1792

Vous pouvez utiliser l' bindParam ou bindValue méthodes pour vous aider à préparer votre déclaration. Cela rend les choses plus claires, à première vue, au lieu de faire $check->execute(array(':name' => $name)); Surtout si vous êtes à la liaison de plusieurs valeurs et des variables.

Vérifiez le clair, facile à lire l'exemple ci-dessous:

$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
}

Si vous vous attendez à de multiples lignes de supprimer l' LIMIT 1 et le changement de la méthode de récupération en 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
}

6voto

Domuta Marcel Points 286

Un petit peu de réponse complète est ici, avec tout le prêt à l'utilisation:

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

 echo $done[0];

Ici, $dbh est PDO db connecteur, et basé sur l' id fom table users nous avons d'obtenir l' username l'aide fetch();

J'espère que cela aide quelqu'un, Profitez-en!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X