Insert & Update in 1 query error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Indra Van den berg

Indra Van den berg

23/06/2016 00:01:10
Quote Anchor link
Hallo ik probeer om 2 sql acties uit te voeren in 1 query
Quote:
INSERT INTO Tickets (Minecraftnaam, Showid) VALUES ('TheIndra', '1')

en
Quote:
UPDATE Shows SET Gekocht = '1' WHERE id='2'

Daarvor heb ik al meerdere code geprobeerd, Maar ik krijg steeds een error? Zou iemand mij kunnen helpen met de juiste code?
Gewijzigd op 23/06/2016 00:02:14 door Indra Van den berg
 
PHP hulp

PHP hulp

16/11/2024 08:00:24
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:04:59
Quote Anchor link
Je kan ze ook als twee losse queries gebruiken?

Bij voorkeur met een UPDATE CASCADE, zodat je UPDATE-query automatisch wordt uitgevoerd, na je INSERT.

En verder mis ik welke error je krijgt.
Gewijzigd op 23/06/2016 00:05:12 door - Ariën -
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:12:55
Quote Anchor link
- Ariën - op 23/06/2016 00:04:59:
Je kan ze ook als twee losse queries gebruiken?

Bij voorkeur met een UPDATE CASCADE, zodat je UPDATE-query automatisch wordt uitgevoerd, na je INSERT.

En verder mis ik welke error je krijgt.

Ik heb deze code geprobeerd

START TRANSACTION;
INSERT INTO Tickets (Minecraftnaam, Showid) VALUES ('TheIndra', '1')
UPDATE Shows SET Gekocht = '1' WHERE id='1'; COMMIT;

En daarbij krijg ik deze error
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO Tickets (Minecraftnaam, Showid) VALUES ('TheIndra', '1') UPDATE Sho' at line 2)

Mijn sql kennis is niet heel goed dus als het kan een example code.
Gewijzigd op 23/06/2016 00:15:12 door Indra Van den berg
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:13:24
Quote Anchor link
???
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:15:55
Quote Anchor link
- Ariën - op 23/06/2016 00:13:24:
???


Ik had een typfout gemaakt er staat nu een goed bericht, Sorry!
Gewijzigd op 23/06/2016 00:17:05 door Indra Van den berg
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:18:12
Quote Anchor link
er mist een ; na je INSERT-query. En verder moet je jouw MySQL database-type op InnoDB zetten als je transacties en commits wilt gebruiken.
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:20:29
Quote Anchor link
- Ariën - op 23/06/2016 00:18:12:
er mist een ; na je INSERT-query. En verder moet je jouw MySQL database-type op InnoDB zetten als je transacties en commits wilt gebruiken.


Is er ook een manier om deze zelfde code zonder transacties & commits uit te voeren.
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:22:49
Quote Anchor link
Ja, de START TRANSACTION; en COMMIT; weglaten, zodat je twee queries overhoudt. Je moet wel goed opletten dat je database consistent blijft.
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:24:56
Quote Anchor link
- Ariën - op 23/06/2016 00:22:49:
Ja, de START TRANSACTION; en COMMIT; weglaten, zodat je twee queries overhoudt. Je moet wel goed opletten dat je database consistent blijft.


Als ik die code uitvoer krijg ik ook een error

Code:
Quote:
INSERT INTO Tickets (Minecraftnaam, Showid) VALUES ('TheIndra', '1');
UPDATE Shows SET Gekocht = '1' WHERE id='1';

Error:
Quote:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE Shows SET Gekocht = '1' WHERE id='1'' at line 2)
Gewijzigd op 23/06/2016 00:25:20 door Indra Van den berg
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:26:53
Quote Anchor link
Je kan standaard maar 1 query per stuk draaien vanuit PHP.
Gewijzigd op 23/06/2016 00:27:03 door - Ariën -
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:28:02
Quote Anchor link
- Ariën - op 23/06/2016 00:26:53:
Je kan standaard maar 1 query per stuk draaien vanuit PHP.


Dus dat betekent dat ik twee keer mysqli_query moet gebruiken?
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:28:50
Quote Anchor link
jup

Edit:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()
Gewijzigd op 23/06/2016 00:29:55 door - Ariën -
 
Indra Van den berg

Indra Van den berg

23/06/2016 00:34:22
Quote Anchor link
- Ariën - op 23/06/2016 00:28:50:
jup

Edit:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()


Het is nu gelukt, Ik dacht altijd dat je meerdere queries kon stoppen in mysqli_query Bedankt!

Toevoeging op 23/06/2016 00:34:36:

Slotje?
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:36:32
Quote Anchor link
FIjnd at het opgelsot is.
Nee, slotjes delen we niet uit als iets opgelost is. Het topic zinkt vanzelf wel omlaag.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/06/2016 00:40:45
Quote Anchor link
- Ariën - op 23/06/2016 00:28:50:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()

NNNNNNNEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

Niet gebruiken!

Om meerdere redenen niet. Long story short, het heeft veels te veel haken en ogen.

Echt, bespaar jezelf een hoop ellende en gebruik losse queries.

Quote:
Ja, de START TRANSACTION; en COMMIT; weglaten, zodat je twee queries overhoudt. Je moet wel goed opletten dat je database consistent blijft.

Als er iets is dat databases consistent houdt, is het wel het gebruik van transacties!
Gewijzigd op 23/06/2016 00:41:53 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 00:41:48
Quote Anchor link
Thomas van den Heuvel op 23/06/2016 00:40:45:
- Ariën - op 23/06/2016 00:28:50:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()

NNNNNNNEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

Niet gebruiken!

Om meerdere redenen niet. Long story short, het heeft veels te veel haken en ogen.

Echt, bespaar jezelf een hoop ellende en gebruik losse queries.

Argumentatie is gelukkig niet verboden!
 
Thomas van den Heuvel

Thomas van den Heuvel

23/06/2016 00:44:20
Quote Anchor link
Je hebt geen garantie dat alle queries worden uitgevoerd.
In welk geval wijzigingen mogelijk half doorgevoerd worden.

Ook is het beveiligen van dat soort queries een ramp.

En tot slot, juist voor dit specifieke doel, het-als-één-geheel-uitvoeren-van-meerdere-queries-(of-in-het-geheel-niet), zijn transacties!

Een multiquery is niet voor dit doel geschikt omdat als die batch halverwege strandt er geen rollback is. Dan zit er dus inconsistente bagger in je database.

Ook kan de detectie van OF er een query onderuit ging en WELKE nogal lastig zijn in een batch :/.
Gewijzigd op 23/06/2016 00:51:21 door Thomas van den Heuvel
 
Ward van der Put
Moderator

Ward van der Put

23/06/2016 06:01:15
Quote Anchor link
Met transacties:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$db
= new mysqli('127.0.0.1', 'username', 'passwd', 'dbname');
$db->begin_transaction();
$db->query("INSERT INTO Tickets (Minecraftnaam, Showid) VALUES ('TheIndra', '1')");
$db->query("UPDATE Shows SET Gekocht = '1' WHERE id='1'");
$db->commit();
$db->close();
?>

Ik vraag me alleen af of dit wel je bedoeling is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE Shows SET Gekocht = '1' WHERE id='1';

Dit is eigenlijk geen update, maar een reset: je stelt Gekocht steeds opnieuw op 1 in.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.