Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP + ADOdolite] Problem z transakcjami, roznice miedzy ADOdolite i ADOdb
mrok
post 6.01.2008, 01:45:33
Post #1





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


Witam

Korzysta ktoś może z transakcji w ADOdblite?

Mój problem polega na tym, iż poniższy skrypt


  1. <?php
  2. require_once 'adodb/adodb.inc.php';
  3. $db = NewADOConnection("mysql");
  4. $db->Connect("xxx”); 
  5.  
  6. $db->StartTrans();
  7. $db->Execute("INSERT INTO test2 ( id_testu , wynik ) VALUES ('3', 'gfd')");
  8. $db->CompleteTrans();
  9. ?>



Bez problemu działa w ADOdb, natomiast to samo przy wykorzystaniu wersji lite wyświetla błąd
  1. Fatal error: Call to undefined method mysql_driver_ADOConnection::StartTrans()

Próbowałem to obejść/naprawić przez skopiowanie kilku funkcji (StartTrans, CompleteTrans) z pliku adodb.inc.php z versji full do adodb.inc.php versji lite, ale niestety nie przyniosło to efektów ;(

Posiada może ktoś, lepsza wersję tej biblioteki?
Wg dokumentacji na stronie ADOdblite transakcje powinny działać…..


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
devnul
post 6.01.2008, 01:48:44
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


coś mi się po kodowaniu wydaje że cudzysłów masz zły i z tąd problem (linia 4 códzysłów zamykający jest inny niż otwierający)


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
mrok
post 6.01.2008, 13:29:46
Post #3





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


Cytat
coś mi się po kodowaniu wydaje że cudzysłów masz zły i z tąd problem

Słuszna uwaga i dobre oko, ale to nie przez to. te cudzyslowie pomylilem jak wklepywalem kod do przegladarki i nie chcialem podawac hasla poblicznie winksmiley.jpg)

Ten sam kod uruchamiam przy ADOdb full (dziala) i lite (nie dziala) wiec to raczej nie cudzyslow.

  1. <?php
  2. require_once 'adodb/adodb.inc.php';
  3. $db = NewADOConnection("mysql");
  4. $db->Connect("xxx"); 
  5.  
  6. $db->StartTrans();
  7. $db->Execute("INSERT INTO test2 ( id_testu , wynik ) VALUES ('3', 'gfd')");
  8. $db->CompleteTrans();
  9. ?>


błąd jest w lini 6. W pakiecie ADOdbLite nie mam zdefiniowanej funkcji StartTrans()questionmark.gif probowałem sciągnąć wersję wcześniejszą 1.4 zamiast 1.42, ale tez jej tam nie ma winksmiley.jpg.

Chyba trzeba bedzie zrezygnowac z lita ;(


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 6.01.2008, 16:02:14
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


... no niestety nie ma obsługi tranzacji w AdoDB lite, wiec masz dwa wyjścia:

1. dopisujesz obsługę tranzakcji:

  1. <?php
  2. class MyAdodbLite extends <nie wiem jak sie nazywa klasa adodbLite... musisz sprawdzic>{
  3.  
  4. private $CORRECT_TRANS;
  5. private $TRANS_IN_PROGRESS;
  6.  
  7. function StartTrans(){
  8. $this->TRANS_IN_PROGRESS = true;
  9. $this->CORRECT_TRANS = $this->Execute("BEGIN");
  10. }
  11.  
  12. function CompleteTrans(){
  13. if ( $this->TRANS_IN_PROGRESS && $this->CORRECT_TRANS ){
  14. $this->Execute("COMMIT");
  15. return true;
  16. } else {
  17. $this->Execute("ROLLBACK");
  18. return false;
  19. }
  20. }
  21.  
  22. function Execute($sql){
  23. if ( $this->TRANS_IN_PROGRESS && $this->CORRECT_TRANS ){
  24. $this->CORRECT_TRANS = parent::Execute($sql);
  25. return $this->CORRECT_TRANS;
  26. }
  27. return parent::Execute($sql);
  28. }
  29.  
  30. }
  31. ?>

(nie sprawdzałem, pisałem w edytorze forum.php.pl tongue.gif)

no i potem odpowiednio podmieniasz tę klasę z klasa adodblite

2. zmieniasz na AdoDB

Ten post edytował Cezar708 6.01.2008, 16:03:17
Go to the top of the page
+Quote Post
mrok
post 6.01.2008, 16:22:47
Post #5





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


Dzięki Cezar. Klasa bardzo zgrabna i przydatna, ale …. dosłownie minute po Twoim poście znalazłem rozwiązanie (i przetestowałem - działa;)

Cały zonk polega na błędnym wyborze bazy.

W AdoDBLite jest niestety różnica między

  1. <?php
  2. $db = NewADOConnection("mysql"); //brak obslugi transakcji
  3. ?>


a

  1. <?php
  2. $db = NewADOConnection("mysqlt"); //obsluga transakcji
  3. ?>


tak więc dwa dni zeszły na szukanie jednego 't' winksmiley.jpg)

Natomiast ADOdb obsługuje transakcje i przy
  1. <?php
  2. $db = NewADOConnection("mysql"); //w ADOdb
  3. ?>


Jeszcze raz dzięki wszystkim za pomoc


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:00