Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ADOdb + transakcje problem
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
AcidBurnt
Witam

problem przedstawia sie nastepujaca: mam taki kodzik w PHP5

  1. <?php
  2.  
  3. $sql = "INSERT INTO temida_users (user_country, user_pass, user_level, user_reg, user_parent, user_name, user
    _surname, user_marital_status, user_pesel, user_occupation, user_driving_license,
     user_car, user_r_post_code, user_r_city, user_r_province, user_r_street, user_s_
    phone, user_m_phone, user_email, user_c_post_code, user_c_city, user_c_province, 
    user_c_street, user_s2_phone, user_m2_phone, user_change_pass, user_system, user_
    info, user_last_level_change) VALUES ('PL', '$usr[pass]', '$usr[level]', '1', '"
    .$row."', '$usr[name]', '$usr[surname]', '$usr[marital_status]', '$usr[pesel]', '$usr[occupation]', '$usr[driving_license]', '$usr[car]', '$usr[r_post_code]', '$usr[r_city]', '$usr[r_province]', '$usr[r_street]', '".($usr[s_phone]$usr[s_phone] : 0)."', '".($usr[m_phone] ? $usr[m_phone] : 0)."', '$usr[email]', '$usr[c_post_code]', '$usr[c_city]', '$usr[c_province]', '$usr[c_street]', '".($usr[s2_phone] ? $usr[s2_phone] : 0)."', '".($usr[m2_phone] ? $usr[m2_phone] : 0)."', '$usr[change_pass]', '$usr[system]', '$usr[info]', 'NOW()');";
  4. $sql .= "UPDATE temida_users SET user_level = 7 WHERE user_id = '".$row."';";
  5. $sql .= "UPDATE temida_users SET user_system = 7 WHERE user_id = '".$row."';";
  6. $db -> Execute("BEGIN;");
  7. if($db -> Execute($sql) === false){
  8. $db -> Execute("ROLLBACK");
  9. array_push($errors, "Użytkownik nie został dodany!");
  10. array_push($errors, $db -> ErrorMsg());
  11.  
  12. }
  13. else{
  14. $db -> Execute("COMMIT;");
  15. $gid = $db -> GetOne("SELECT user_id FROM temida_users WHERE user_pesel = '$usr[pesel]' LIMIT 1");
  16. }
  17.  
  18. ?>


zakładajac ze zapytanie w $sql jest w 100% poprawne i sie na pewno wykona, sql zwraca mi bład postaci:

  1. ERROR: current transaction IS aborted, commands ignored until end of transaction block] IN EXECUTE("INSERT
  2. INTO temida_users
  3. (user_country, user_pass, user_level, user_reg, user_parent, user_name, user_surname, user_marital_status, user_pesel, user_occupation, user_driving_license, user_car, user_r_post_code, user_r_city, user_r_province, user_r_street, user_s_phone, user_m_phone, user_email, user_c_post_code, user_c_city, user_c_province, user_c_street, user_s2_phone, user_m2_phone, user_change_pass, user_system, user_info, user_last_level_change) VALUES ('PL', 'c583106eab345c238516e107e0e19a1b', '8', '1', '133', 'Tymoteusz', 'Masiak', 'Z/M', '79032113079', 'Kierowca', 'YES', 'NO', '58-200', 'Dzierżoniów', 'dol', 'Nowowiejska 10/2', '0', '696025574', 'tymonm@wp.pl', '', '', 'null', '', '0', '0', 'NO', '8', '', 'NOW()');")


ktos może pomoc?
Zbłąkany
A spróbuj użyć modułu smart transaction w adodb smile.gif
AcidBurnt
Cytat(Zbłąkany @ 2006-03-03 09:06:45)
A spróbuj użyć modułu smart transaction w adodb smile.gif

dzieje sie dokladnie to samo sad.gif
DeyV
Prawdę mówiąc - trudno mi powiedzieć, co mozę być przyczyną takiego zachowania.
Być może ADO nie poradziło sobie z wykonaniem wielu zapytań pod rząd, w jednym Execute


Swoja drogą - jeśli pracujesz na PHP5, to znacznie ładniej wygląda i "jest lepszy" kod, który transakcje łączy z wyjątkami.

Np.
  1. <?php
  2.  
  3. include("../adodb-exceptions.inc.php"); 
  4. include("../adodb.inc.php");
  5. // (... )
  6. try { 
  7.  $db->StartTrans(); 
  8.  
  9.  $db->Execute( 'INSERT INTO ... ' );
  10.  $db->Execute( 'INSERT INTO ... ' );
  11.  $db->Execute( 'UPDATE ... ' );
  12.  $db->Execute( 'INSERT INTO ... ' );
  13.  
  14.  $db->CompleteTrans(); 
  15. } catch( exception $e ) { 
  16.  
  17. $db->FailTrans();
  18.  
  19. var_dump($e); 
  20. adodb_backtrace($e->gettrace());
  21. }
  22.  
  23. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.