2010-09-07 21 views
4

Je suis nouveau sur les objets PDO et je ne trouve pas une seule documentation qui m'aidera. Disons que je suis un simple code à supprimer une ligne:PHP/PDO: utiliser une instruction préparée simple avec retour de requête/lignes affectées?

$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'"); 

qui renverra les lignes affectées, mais comment pourrais-je utiliser les commandes préparées avec cela? Peut utiliser l'utilisation $dbh->prepare ET $dbh->exec ou interroger!?

Répondre

11

Il devrait être le même que toute autre déclaration:

$stmt = $dbh->prepare("DELETE FROM fruit WHERE colour = ?"); 
$stmt->execute(array('red')); 
$count = $stmt->rowCount(); 

Le PDO Statement rowCount() devrait être ce que vous cherchez à faire .

EDIT

corrigé en ajoutant le ->rowCount() qui renverra le nombre de lignes. ->execute dans une instruction renverra un bool, true ou false si la requête a erronné ou non. Bien sûr, toutes ces informations sont facilement disponibles au PDO Statement Manual

+0

Donc '-> execute' peut aussi retourner des lignes affectées, c'est exactement ce dont j'avais besoin. Je vous remercie! – John

+1

Non, j'avais déjà une erreur. Le manuel indique que '-> execute' renvoie un booléen, mais en regardant les autres fonctions du manuel,' -> rowCount() 'fournira le nombre. –

+0

Cela correspondrait parfaitement à mon code, et est beaucoup plus logique avec la fonction '-> rowCount()' à la fin. Merci encore. – John

1

$dbh->prepare renvoie un objet PDOStatement. Vous appelez alors $stmt->execute pour obtenir le résultat.

More info in the PDO manual

Voici un exemple du manuel:

<?php 
/* Execute a prepared statement by passing an array of insert values */ 
$calories = 150; 
$colour = 'red'; 
$stmt = $dbh->prepare('SELECT name, colour, calories 
         FROM fruit 
         WHERE calories < ? AND colour = ?'); 
$stmt->execute(array($calories, $colour)); 
?> 
+1

Mais comment retourner le nombre de lignes affectées? Puis-je l'utiliser comme dans mon exemple, '$ count = $ stmt-> execute'? EDIT: quelqu'un d'autre a répondu. – John