Archief - Verwijderen meerdere records

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Eleven

Legacy Member
Voor een project wil ik meerdere records in één keer uit een tabel verwijderen (dmv checkboxes). Dit doe ik door de checkboxes te overlopen met een for-lus.
en indien een checkbox is aangeduid hiervoor een query aan te maken:
Code:
$query .= "DELETE FROM ... ;"
$query voer ik dan uit als de for-lus volledig is doorlopen.
Dit resulteert echter in een fout als er meerdere checkboxes zijn aangeduid.
Als er maar één is aangeduid is er geen probleem.

Ik heb dit nu snel opgelost door in de for-lus de query uit te voeren.
Echter lijkt het me performanter om de query slechts één keer uit te voeren en direct x-aantal records te verwijderen.

Na wat proberen lijkt het me niet te lukken om in php meerdere rijen in één keer te verwijderen.

Code:
$query = "DELETE FROM table WHERE iets = '1' AND ietsAnders = '20'; DELETE FROM table WHERE iets = '1' AND ietsAnders = '30'";
mysql_query($query) or die("Fout");
Als ik de query echo en in phpmyadmin invoer werkt hij wel.
Ik heb geprobeerd om de ; weg te laten (mag niet volgens de php manual).
A SQL query

The query string should not end with a semicolon. Data inside the query should be properly escaped.
Ik heb ook geprobeerd om \n toe te voegen tussen de 2 deelquery's maar dit blijkt ook niet te werken.
Iemand een idee hoe het dan wel moet?

passero

Legacy Member
Er staat dat uw statement niet mag eindigen op een ; Doe dus die ; weg... Maar niet ; op het einde van uw regel, de ; in uw query moet weg:

$query .= "DELETE FROM ... ;"

Moet

$query .= "DELETE FROM ... "

worden

Ge kunt niet meerdere statements met 1 mysql_query uitvoeren. Ge moet het dus appart doen ofwel:

delete from table where id in (1,2,3,4) ipv
delete from table where id = 1
delete from table where id=2
....

Dat kunt ge wel doen om maar 1 statement te hebben.

dJeez

Legacy Member
1. PHP laat niet toe van meerdere queries in 1x uit te voeren via mysql_query, dat staat duidelijk vermeld in de reference. Check dus eerst de beschikbare documentatie (PHP: mysql_query - Manual).
2. Definieer een unieke primary key voor uw tabel
3. Leer de SQL IN functie te gebruiken (MySQL :: MySQL 5.1 Reference Manual :: 11.2.3 Comparison Functions and Operators).
4. ...
5. Profit!

*edit* Forum was ff down en bovenstaande post stond er niet toen ik reageerde, maar 'k laat deze toch maar staan :p.

Eleven

Legacy Member
Bedankt, het werkt nu in 1 query met de SQL IN en me de PHP implode functie voor het lijstje van keys te genereren.

@passero: ik bedoelde inderdaad de ; in de query, niet de php ;
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan