Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano (edytowane)

Witam,

Pojawił mi się oto taki problem. Doszliśmy ze znajomym, że obecne zapytanie ma skłonności do błędu, powodów jest multum, a większość to zazwyczaj lagi serwera. Postanowiliśmy wziąć pod uwagę Transakcję. Oto co wymodziłem:

            /* Begin transaction! */
           $this->ipsclass->DB->query('START TRANSACTION');

           /* Update sender FG */
           $sender     = $this->ipsclass->DB->do_update( 'members', array( 'fg' => $this->ipsclass->member['fg'] - $this->ipsclass->input['amount'] ), 'id = '.$this->ipsclass->member['id'] );

           if ( !$sender )
           {
               $this->ipsclass->DB->query('ROLLBACK');
           }

           /* Update recipient FG */
           $recipient  = $this->ipsclass->DB->do_update( 'members', array( 'fg' => $this->to_user['fg'] + $this->ipsclass->input['amount'] ), 'id = '.$this->to_user['id'] );

           if ( !$recipient )
           {
               $this->ipsclass->DB->query('ROLLBACK');
           }

           $this->ipsclass->DB->query('COMMIT');

Zastanawiam się jak sprawdzić czy zapytania zostały wykonane prawidłowo. $this->ipsclass->DB->get_num_rows nie pasuje, bo nie zwraca wartości :-) Można by dać to w warunek if ( !$result = całe zapytanie ), ale to logiki zupełnie nie ma. Na dodatek pojawił się problem, czy IP.Board nawiązuje połączenie z bazą per member czy inaczej, bo mogą wystąpić problemy z tzw. multi user :-)

PS. Podczas do_update i sukcesu daję TRUE, a na FALSE domyślam się brak sukcesu. Pewności nie daję, ale taki kod mnie powoli zadawala.

PS2. OK, wiem co zwraca do_update już, musiałem manual poczytać -

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
Dzięki temu wiem, że takie warunki dają mi pewne zabezpieczenie i mogę takiej konstrukcji używać. Teraz zostaje pytanie, czy połączenia są per użytkownik czy inaczej.

PS3. Shit! Zapomniałem o fakcie, że do transakcji wymagany jest silnik InnoDB, a nie MyISAM, opłaca się przechodzić na InnoDB? IP.Board go oficjalnie wspiera, więc?

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Opublikowano (edytowane)

Lul, czyli jakie jest pytanie? xD

Witaj,

Czy opłaca się w tej sytuacji przejść na InnoDB? Czy FULLTEXT indeksy się posypią i będzie więcej wad niż zalet, np. z przenoszeniem bazy?

Czy IP.Board tworzy nowe połączenia dla użytkownika czy inaczej tworzy ID połączeń? Potrzebne to jest, aby transakcję nie posypały się na tzw. Multi-User System. Czyli transakcja blokuję tabelę wg. innych schematów niż użytkownik.

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

  • Manager
Opublikowano

Huh, szczerze to takim specem od sql nie jestem, ale wiem, że IPS zaleca używanie MYISAM, a w szczególnych przypadkach, na forach bardzo dużych, INNODB, jednak domyślnie przy instalacji należy zastosować ten pierwszy. :P

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.