PHP/MySQL - ne vraća grešku kod "složenog" query-a

Pozdrav,

imam sljedeći query koji je složen od dva inserta

$query = "
INSERT INTO test_table (number) VALUES (1); 
INSERT INTO test_table (number) VALUES (2);
"

…taj query baca grešku pošto mi je number polje UNIQUE i brojevi 1 i 2 su već ranije uneseni. To je ok, želim grešku.

No problem nastaje u tome ako tom queryu prethodi nešto što se može izvršiti, onda ne dobijem grešku …tipa, ako mi je query:

$query = "
INSERT INTO test_table (number) VALUES (754); 
INSERT INTO test_table (number) VALUES (1); 
INSERT INTO test_table (number) VALUES (2);
"

Sada imamo situaiju da je 754 novi broj koji se može upisati, on se upiše, ali više ne dobijem grešku.

Jel ima nekakv setup za PDOStatement da mi baci grešku ako bilo koji dio query-a dođe u konflikt sa strukturom baze?

Hvala.

Hmm, jeli bi transakcija pomogla? Samo nagađam.

Edit: ja mislim da baza zapravo ispiše grešku, samo ti u aplikaciji ne hvataš greške.

@bozoou moraš loopat kroz rezultate, jer za svaki query koji se izvrši dobiješ poseban rezultat koristi komandu: PHP: PDOStatement::nextRowset - Manual

1 Like

Osobno bi svakako izbjegao zapisivanje više slogova direktno iz programskog koda. Procke blabla :slight_smile:

U ovom slučaju bi sve što treba zapisao u pomoćnu tablicu i onda “u komadu” sve prepisao iz pomoćne u pravu tablicu.

Transakciju i imam …ali kako u navedenom slučaju MySQL ne vrisne grešku, ne mogu niti trigirati rollback transakcije.

Baš mi i treba greška da bi mogao rollback trigirati.
Inače se izvršavanje ponaša tako da će baza izvršiti sve slogove do greške i nakon greške neće izvršiti više niti slogove koje bi bilo moguće izvesti.
A grešku će vrisnuti samo u slučaju ako nema niti jedan uspješno izvršen slog prije prve greške.

Pa cilj mi je zbog veće količine različitih upisa sve potrpati u jedan query, koji ako se ne izvrši …samo abortiram transakciju (koju spomene @komentar ) i sve se vrati u početno stanje.

Ne vidim nikakve prednosti pomoćne tablice?
Grešku i dalje nebi detektirao bez nekakve kompleksne analize što je prošlo što nije.
A samo komplicira sistem jer nije univerazalno riješenje za različite oblike upisa po broju polja …različitih tablica, različitih metoda update/insert/delete…itd…

Ovo bi moglo pomoći. :slight_smile: :slight_smile:

Brate možda koristiš pogrešan sql kod, koristi sljedeće za multi query na istu tabelu, možda iz tog razloga ti pravi problem:

INSERT INTO `table1` (number)
VALUES (1), (2), (3), (753)

Ma ono gore je pojednostavljen primjer. U praksi ima tu i inserta i updejta i brisanja i rada po različitim tablicama.

No pojednostavljeni primjer također puca, pa mi je poslužio da istražim kako se točno ponaša baza.

1 Like

Našao: php - How to get SQL errors when using multiple statements - Stack Overflow

2 Likes