Michał Ziembiński Programista
Temat: Transakcje i PDO
Witam mam mały problem z transakcjami.Przykładowy kod
$dbh = new PDO($dsn, $DBUserName, $DBUserPass, $charset);
echo $dbh->beginTransaction();
$sth = $dbh->exec("DROP TABLE users_names");
$sth = $dbh->exec("UPDATE users SET pass = '12345'");
echo $dbh->rollBack();
zwracają true, true i polecenie się wykonuje. Żadnego errora, żadnego wyjątku nie wyrzuca. Tak jakby wszystko było ok. Niestety na bazie nie widać rezultatów, tabela usunięta i rollback nie zadziałał. Tabele są typu InnoDB
Gdy wywołuję polecenie w mysql> show processlist; okazuje sie, że jest proces uśpiony który właśnie wywołałem. Podobnie jest w przypadku użycia polecenia commit.
Przykładowy kod:
$dbh = new PDO($dsn, $DBUserName, $DBUserPass, $charset);
echo $dbh->beginTransaction();
$prepared = $dbh->prepare($query);
$prepared->execute();
echo $dbh->commit();
to samo tylko nie widać insertów na polach na których miało być wykonane query. Show processlist; proces uśpiony.
Najciekawsze jest to, że jeśli zamienię miejscami execute i commit to widać rezultaty
echo $dbh->beginTransaction();
$prepared = $dbh->prepare($query);
echo $dbh->commit();
$prepared->execute();
Tylko nie wiem czy wtedy transakcje faktycznie działają. Na php.net najpierw jest beginTransaction->prepared->execute->commit
Będe wdzięczny za sugestieTen post został edytowany przez Autora dnia 30.08.13 o godzinie 10:54