Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]mysqli_commit
kamilo818
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Cześć, moj kod:
  1. $conn = self::getConnection();
  2. mysqli_autocommit($conn,FALSE);
  3. $SQL = "UPDATE fr_product SET name='".$name."', image='".$image."',description='".$description."',price='".$price."',code='".$code."',seo_title='".$seo_title."',seo_keywords='".$seo_keywords."',seo_description='".$seo_description."',newest='".$newest."',recommended='".$recommended."',promotion='".$promotion."',image_promotion='".$image_promotion."',promotion_for_home='".$promotion_main."',products_category='".$category."' WHERE id='".$id."'";
  4. $conn->query($SQL);
  5.  
  6.  
  7. foreach($filters as $k=>$f){
  8.  
  9. $conn->query("UPDATE fr_product_filter SET filter_valuee='".$f."' WHERE product_code='".$code."' AND filter_id='".$k."'");
  10.  
  11. }
  12.  
  13.  
  14. if(mysqli_commit($conn)){
  15. echo '<div class="alert alert-success" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>Operacja wykonana poprawnie!</div>';
  16. }else{
  17. mysqli_rollback($conn);
  18. echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Nieoczekiwany błąd. </div>';
  19.  
  20. }
  21.  
  22. mysqli_close($conn);
  23. break;


  1. if(mysqli_commit($conn)
- zawsze jest true mimo że
  1. $conn->query("UPDATE fr_product_filter SET filter_valuee='".$f."' WHERE product_code='".$code."' AND filter_id='".$k."'");
nie wykonuje się (filter_valuee zamiast filter_value)

Czy ja to zle stosuję?

Chce uzyskać efekt ze jeśli któreś zapytanie nie wykona sie poprawnie to wszystko wraca do punktu poczatkowego.

Będę wdzieczny za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bo mysqli_commit nie sprawdza czy sie zapytania nie powiodly... To nie jego rola


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


@nospor wg dokumentacji tak to właśnie działa. Przykłady nawet ilustrują podobny przypadek.

Użyj $conn->mysqli_commit()

Raczej nie powinno mieć znaczenia mieszanie ale kto wie...
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Na jakim silniku masz tego MySQL-a? Jeśli MyISAM to transakcje nie są wspierane, musiałbyś się przestawić na InnoDB.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
@nospor wg dokumentacji tak to właśnie działa. Przykłady nawet ilustrują podobny przypadek.
Chyba masz innego manuala niz ja. Owszem, w moim manualu jest podobny przyklad co tutaj, ale tylko podobny. Przyklad z manuala w zaden sposob nie pokazuje, ze mysqli_commit zarzadza zepsutymu zapytaniami. Przyklad w manualu i IF mowi jedynie, ze commit sie nie powiodl. Nie mowi nic o pozostalych zapytaniach.


Tak wiec jeszcze raz: COMMIT nie sluzy do mowienia,czy zapytania sie powiodly czy nie. Commit sluzy do zatwierdzenia zapytan, ktore sie powiodly. To user ma wiedziec czy sie zapytania powiodly czy nie i w zaleznosci od tego ma wywolac albo COMMIT albo ROLLBACK - proste.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post
Post #6





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Mam InnoDB.

Czyli teraz mam tak
  1.  
  2. $conn = self::getConnection();
  3.  
  4. $conn->autocommit(false);
  5.  
  6.  
  7. $SQL = "UPDATE fr_product SET name='".$name."', image='".$image."',description='".$description."',price='".$price."',code='".$code."',seo_title='".$seo_title."',seo_keywords='".$seo_keywords."',seo_description='".$seo_description."',newest='".$newest."',recommended='".$recommended."',promotion='".$promotion."',image_promotion='".$image_promotion."',promotion_for_home='".$promotion_main."',products_category='".$category."' WHERE id='".$id."'";
  8. $result = $conn->query($SQL);
  9.  
  10.  
  11. $err_f = false;
  12. foreach($filters as $k=>$f){
  13.  
  14. if(!$result_filter = $conn->query("UPDATE fr_product_filter SET filter_valuee='".$f."' WHERE product_code='".$code."' AND filter_id='".$k."'")){
  15. $err_f=true;
  16. }
  17. }
  18.  
  19.  
  20. $conn->commit();
  21.  
  22. if($result && $err_f==false){
  23. echo '<div class="alert alert-success" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>Operacja wykonana poprawnie!</div>';
  24. }else{
  25. $conn->rollback();
  26. echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Nieoczekiwany błąd. </div>';
  27.  
  28. }
  29.  
  30. $conn->close();
  31. break;
  32.  


Ok i teraz wydaje mi się że nie działa
  1. $conn->rollback();
ponieważ
  1. $result = $conn->query($SQL);
wykonuje się poprawnie (zmiana w bazie) a
  1. if(!$result_filter = $conn->query("UPDATE fr_product_filter SET filter_valuee='".$f."' WHERE product_code='".$code."' AND filter_id='".$k."'")){
  2. $err_f=true;
  3. }
rzuca błąd w wchodzi w else
  1. $conn->rollback();
  2. echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Nieoczekiwany błąd. </div>';

ale to pierwsze zapytanie nie jest cofnięte.

Jakieś pomysły?

------------------------------
edit

OK działa

  1. $conn = self::getConnection();
  2.  
  3. $conn->autocommit(false);
  4.  
  5.  
  6. $SQL = "UPDATE fr_product SET name='".$name."', image='".$image."',description='".$description."',price='".$price."',code='".$code."',seo_title='".$seo_title."',seo_keywords='".$seo_keywords."',seo_description='".$seo_description."',newest='".$newest."',recommended='".$recommended."',promotion='".$promotion."',image_promotion='".$image_promotion."',promotion_for_home='".$promotion_main."',products_category='".$category."' WHERE id='".$id."'";
  7. $result = $conn->query($SQL);
  8.  
  9.  
  10. $err_f = false;
  11. foreach($filters as $k=>$f){
  12.  
  13. if(!$result_filter = $conn->query("UPDATE fr_product_filter SET filter_valuee='".$f."' WHERE product_code='".$code."' AND filter_id='".$k."'")){
  14. $err_f=true;
  15. }
  16. }
  17.  
  18.  
  19.  
  20.  
  21. if($result && $err_f==false){
  22. [b] $conn->commit();[/b]
  23. echo '<div class="alert alert-success" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>Operacja wykonana poprawnie!</div>';
  24. }else{
  25. $conn->rollback();
  26. echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Nieoczekiwany błąd. </div>';
  27.  
  28. }
  29.  
  30. $conn->close();
  31. break;
  32.  

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 Aktualny czas: 19.08.2025 - 10:43