Hier haben ist meine Skript Struktur:Transaktionen für Abfragen verwenden, die abhängigen Ergebnisse
try {
$dbh_conn->beginTransaction();
$stmt1 = $dbh_conn->prepare("SELECT user_id FROM activate_account WHERE token = ?");
$stmt1->execute(array($validate_activate_token));
$num_rows = $stmt1->fetch(PDO::FETCH_ASSOC);
if($num_rows) {
$user_id = $num_rows['user_id'];
$stmt2 = $dbh_conn->prepare("UPDATE users SET active = 1 WHERE id = ?");
$stmt2->execute(array($user_id));
$updated = $stmt2->rowCount();
if ($updated > 0){
$stmt3 = $dbh_conn->prepare("DELETE FROM activate_account WHERE token = ?");
$stmt3->execute(array($validate_activate_token));
$status = "all fine";
} else {
$status = "first problem";
}
} else {
$status = "second problem";
}
$dbh_conn->commit();
echo $status;
die;
} catch(PDOException $e) {
$dbh_conn->rollBack();
$status = "third problem";
echo $status;
die;
}
Das Ergebnis meines Code immer ist second problem
. Warum? Und wie kann ich meinen Code umschreiben, um ihn zu reparieren?
Bitte beachte, dass ich diesen Zustand getestet habe if($num_rows) {
separat (in einem anderen Skript einzeln) und es ist wahr, aber wenn ich es in Skript oben schreiben, es ist immer falsch .
'fetch()' gibt FALSE zurück, wenn Fehler auftreten. Sind Sie sicher, dass diese Abfragen keinen solchen Fehler erzeugen? Es gibt auch NULL zurück, wenn keine weiteren Datensätze mehr abgerufen werden sollen. Sind Sie sicher, dass die Abfrage tatsächlich Ergebnisse liefert, wenn die Eingabe erfolgt? Sie können versuchen, Protokoll zu untersuchen. –