Estoy tratando de configurar mi primera transacción en MySQL con PHP/DOP ...PHP MySQL DOP estructura del código de transacción
Sólo tengo una pregunta rápida, ¿cuál es la mejor manera de determinar si la consulta anterior fue exitoso o no? Esto es lo que tengo ahora, pero preferiría encontrar una manera de probar la consulta con una declaración if.
Esto es más o menos un código de simulacro para tratar de obtener un modelo funcional ... Sé que $ results no está probando efectivamente si algo era bueno o malo ... lo tengo más como un marcador de posición para el trato real cuando llegue el momento ..
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;
}
}
Por qué no usar beginTransaction de DOP(), commit() y rollback() métodos? – GordonM
LOL Acabo de enterarme del método startTransaction esta mañana ... Supuse que los otros dos estaban allí, pero aún no los había buscado. Eso está en la lista de TODO ¡gracias! – guyfromfl
Además, no tiene que preparar() cada enunciado, de hecho es un desperdicio para aquellos en los que no va a insertar ninguna variable. Simplemente ejecute esos con query() en su lugar. Guarda en ambas líneas de código y se prepara innecesariamente. – GordonM