Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

imate dva upita jedan pukne, sta sa drugim?

[es] :: PHP :: imate dva upita jedan pukne, sta sa drugim?

[ Pregleda: 2832 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.69.*



+6 Profil

icon imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 03:56 - pre 156 meseci
Pozdrav ljudi,

mozda je bilo pitanja na ovu temu ali ja stvarno nisam uspeo da nadjem

Npr,

imamo jednu tabelu users(id, user_name, pass, email) gde je id auto increment
druga tabela users_more(id, name, surname, nick name, ity, job)

kada ubacujemo novog usera, treba da imamo dva upita, e sad sta ako pukne recimo drugi upit a prvo je prosao?
onda po nekoj mojoj logici trebalo bi da se izbrise zadnji upisani red iz prve tabele...

ali opet, proveravati npr if(!rez2) izrbrisi zadnji red iz tabele 1(users) i nije neko elegantno resenje
ajde opet i nekako za 2 tabele ali sta ako imamo 10 upita i pukne recimo 1, 3, 8 i 9? :)

jel postoji nesto u php-u sto moze da resi ovo ili mozda sam mysql?

I da, posto sigurno postoji resenje :) da li postoje razlike ima izmedju inodb i myisam engine-a? :)

Pozdrav!
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.adsl.eunet.rs.



+19 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 07:33 - pre 156 meseci
Na nivou MySQLa rešenje se zove Transakcija, i moraš koristiti innodb.
Na nivou PHPa rešenje znaš: if(!rez2)
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 07:38 - pre 156 meseci
Možda pomogne:
http://stackoverflow.com/quest...to-multiple-tables-in-database
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 07:44 - pre 156 meseci
Naravno da postoji razlika izmedju InnoDB i MyIsam, a eto jedna je to da za transakcije moras imati InnoDB.
Zatim "foreign key" je moguc samo u InnoDB.

Proguglaj malo za vise informacija.

U PHP-u ne znam za kvalitetno rjesenje osim da izvrsis DELETE nakon sto primjetis da se nesto nije izvrsilo kako treba :)
 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1122
*.dynamic.isp.telekom.rs.

Sajt: www.gvozden.info


+68 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 08:22 - pre 156 meseci
mislim da begin/end radi i u myisam
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 10:36 - pre 156 meseci
Citat:
agvozden: mislim da begin/end radi i u myisam


Kako? :) Moze primer?
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

mlbrnda
Mladen Brndušić
Požarevac

Član broj: 114221
Poruke: 56
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 11:02 - pre 156 meseci
Pozdrav svima,
mislim da je najlakše rešenje za ovaj slučaj korišćenje PDO ili MySQLi biblioteke koje podržavaju transakcije ukoliko se ne žele koristiti transakcije u MySQL-u.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 11:07 - pre 156 meseci
Citat:
mlbrnda: Pozdrav svima,
mislim da je najlakše rešenje za ovaj slučaj korišćenje PDO ili MySQLi biblioteke koje podržavaju transakcije ukoliko se ne žele koristiti transakcije u MySQL-u.

Isto pitanje. Da li moze primer PDO ili MySQLi koji ne koristi transakcije u MySQL-u? :)
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

mlbrnda
Mladen Brndušić
Požarevac

Član broj: 114221
Poruke: 56
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 11:31 - pre 156 meseci
Evo primera za PDO:
Code:

$pdo->beginTransaction();
try
{
$pdo->query("insert into korisnici values (null,'vladan')");
$rez = $pdo->query("select * from korisnici where ime = 'vladan'");
$rezFetch = $rez->fetch(PDO::FETCH_ASSOC);
echo $rezFetch["ime"];
$pdo->commit();
}
catch(PDOException $ex)
{
    $pdo->rollBack(); 
}


evo i za mysqli:

Code:

$mysqli->autocommit(false);
$mysqli->real_query("insert into korisnici values (null,'Petar')");
...
$mysqli->commit();

ili

$mysqli->rollback();
...


ovo za mysqli sam napisao malo skraćeno, isto bi trebalo koristiti u try-catch bloku, opširnije o mysqli transakcijama http://www.php.net/manual/en/mysqli.autocommit.php
i PDO transakcijama http://www.php.net/manual/en/pdo.transactions.php

I da, mislim da kapiram zasto iza vladinih poruka stoji smešak, ovo se ne može koristiti na myisam!!! :)

[Ovu poruku je menjao mlbrnda dana 23.05.2011. u 12:51 GMT+1]
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?23.05.2011. u 14:31 - pre 156 meseci
@mlbrna
Smesak je zato sto i dalje koristis MySQL transakcije za koje se ne moze koristiti MyISAM. PHP ne moze da koristi transakcije vec samo MySQL.
Cim si napisao $pdo->beginTransaction(); ti koristis MySQL transakcije.

Code (php):

$mysqli->autocommit(false);  
//jednako sa
mysql_query("SET AUTOCOMMIT=0");

$pdo->beginTransaction();
//jednako sa
mysql_query("START TRANSACTION");
 


A pitao sam i za primer za BEGIN i END na MyISAM tabelama jer ni to ne obezbedjuje ono sto je coveku potrebno.

Resenje je samo MySQL transkacija ili neka druga baza koja podrzava vertikalno particionisanje ili preko PHP-a i to ovako nekako:
1. da proveri da li je uspeo insert u prvu tabelu
2. ako jeste onda radi insert u drugu tabelu
3. ako NIJE uspeo insert u drugu tabelu onda brise ono sto je uneo u prvu tabelu.

Ovde uvek postoji mogucnost da DELETE ne odradi posao ako dodje do neke greske.



[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

midgard
Beograd, Vozdovac

Član broj: 59016
Poruke: 127
*.routotelecom.com.



+1 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?24.05.2011. u 13:18 - pre 156 meseci
Mozda bi stored procedure mogle da pomognu, ali nisam 100% siguran da ce da uradi rollback na sve prethodne upite.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?24.05.2011. u 15:56 - pre 156 meseci
U stored proceduri opet moras da izvrsis dva zasebna sql-a. Sto mu dodje kao da i nije u stored proceduti nego 2 odvojena sql-a.
Ako hoces u proceduri da koristis rollback onda opet moras da koristis transkacije sto mu opet dodje kao da koristis transakcije bez procedure.
U ovom slucaju procedura ne resava problem vec je samo suvisan korak. Zato sam pitao za primer za begin/end.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.69.*



+6 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?10.06.2011. u 03:09 - pre 155 meseci


ovo radi odlicno! hvala :)

a sta recimo ako ima 2 upita za dve razlicite tabele ali te tabele nisu u vezi, to jest nemaju foreign key.
npr:
table order(id, description, price)
i table custom_order(id, price, image)

i sada deletujem where id=1 iz tabele order i where id = 100 iz tabele custom_order


da li ce transkakcija raditi ili radi samo sa parent and child tabelama?
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: imate dva upita jedan pukne, sta sa drugim?14.06.2011. u 18:50 - pre 155 meseci
Nemoj biti siguran u primer ako si ti table users i users_more vezane po user_id da ce dodeliti isti user_id.
Bolje da izvrsis prvo jedan sql da uzmes id pa da sa tim id-om insertujes u drugu tabelu.
Transakcije nemaju veze da li su tabele vezane. Jednostavno izvrsavas sql-ove koje ti hoces i ako mislis da nesto ne valja ponistis sve te sql-ove sa rollback i to je to.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: PHP :: imate dva upita jedan pukne, sta sa drugim?

[ Pregleda: 2832 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.