Insert & Update in 1 query error
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
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 -
- 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.
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 - 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
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.
- 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.
Ja, de START TRANSACTION; en COMMIT; weglaten, zodat je twee queries overhoudt. Je moet wel goed opletten dat je database consistent blijft.
- 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';
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
Gewijzigd op 23/06/2016 00:27:03 door - Ariën -
- 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?
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 -
- 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()
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?
Nee, slotjes delen we niet uit als iets opgelost is. Het topic zinkt vanzelf wel omlaag.
- Ariën - op 23/06/2016 00:28:50:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()
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
Thomas van den Heuvel op 23/06/2016 00:40:45:
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.
- Ariën - op 23/06/2016 00:28:50:
Maar ik lees net dat er ook een multi-query functie bestaat:
mysqli_multi_query()
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!
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
Code (php)
1
2
3
4
5
6
7
8
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();
?>
$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:
Dit is eigenlijk geen update, maar een reset: je stelt Gekocht steeds opnieuw op 1 in.