PHP MySQL pour PDO code de Transaction de la structure

Je suis en train de créer ma première transaction MySQL à l'aide de PHP/PDO...

J'ai juste une petite question, quelle est la meilleure façon de déterminer si la requête précédente a été un succès ou pas? Voici ce que j'ai en ce moment, mais j'aimerais trouver un moyen de tester la requête avec une instruction if.

C'est assez bien se moquer de code pour essayer d'obtenir un modèle de travail.. je sais que $résultats n'est pas efficace de tester si quelque chose est bon ou mauvais.. je l'ai, il y a plus d'un titulaire de place pour la vraie affaire quand vient le temps..

if ($_POST['groupID'] && is_numeric($_POST['groupID'])) {
$sql = "SET AUTOCOMMIT=0";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$sql = "START TRANSACTION";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$sql = "DELETE FROM users_priveleges WHERE GroupID=:groupID";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
try {
$sql = "DELETE FROM groups WHERE GroupID=:groupID LIMIT 1";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
$results["error"] = null;
$results["success"] = true;
try {
$sql = "DELETE FROM users WHERE Group=:groupID";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
$results["error"] = null;
$results["success"] = true;
$sql = "COMMIT";
$dbs = $dbo->prepare($sql);
$dbs->execute();
}
catch (PDOException $e) {
$sql = "ROLLBACK";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$results["error"] = "Could not delete associated users! $e";
$results["success"] = false;
}   
}
catch (PDOException $e)
{
$sql = "ROLLBACK";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$results["error"] = "COULD NOT REMOVE GROUP! $e";
$results["success"] = false;
}
}
  • Pourquoi ne pas utiliser PDO est beginTransaction(), commit() et rollback() méthodes?
  • LOL je viens d'apprendre de la beginTransaction méthode ce matin... j'ai pensé que les deux autres étaient là, mais n'avais pas regardé en eux encore. C'est sur la TODO liste tho merci!
  • Aussi, vous n'avez pas à préparer() à chaque déclaration, en fait, c'est plutôt inutile pour ceux en qui vous n'allez pas à insérer toutes les variables. Il suffit d'exécuter ceux avec query() à la place. Permet d'économiser sur les deux lignes de code inutiles et se prépare.
InformationsquelleAutor guyfromfl | 2011-12-23