SQL syntax error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin

Robin

03/10/2009 00:43:00
Quote Anchor link
Hallo,

Ik zit met een foutje in mijn SQL-syntax en weet niet waar precies de fout zit. Als iemand de fout vindt zou dat heel fijn zijn.

Ik heb de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
switch($_POST[$dag["1"]])
                {
                    case
"1": //Aanmelden eerstkomende dag (verwijder record uit database)
                                        $sql1='IF EXISTS (SELECT naam, datum FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
                    BEGIN
                    DELETE FROM afmelden WHERE naam = "'
.$user->data['username'].'"
                            AND datum = "'
.$dag["1"].'"
                    END'
;
                    $res = mysql_query($sql1,$link) or die(mysql_error());
                
                    $d1check = "1";
                    break;
                    case
"0": //afmelden eerstkomende dag  (voeg afmelding toe aan database)
                    $sql1 = 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
                    BEGIN
                        
                        INSERT INTO afmelden (naam ,datum ,ip) VALUES ("'
.$user->data['username'].'","'.$dag["2"].'","'.$ipaddr.'")
                    END'
;
                    $res = mysql_query($sql1,$link) or die(mysql_error());
                    $d1check = "0";
                    break;
                }

?>

En de volgende SQL errors
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 'IF EXISTS (SELECT naam, datum FROM afmelden WHERE naam= "Robin" AND datum = "125' at line 1

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 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "Robin" AND datu' at line 1


Alvast bedankt,
Robin
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
PHP hulp

PHP hulp

29/11/2024 10:39:37
 
Jan Willem van der Veer

Jan Willem van der Veer

03/10/2009 09:40:00
Quote Anchor link
Misschien moet je even hier kijken: http://dev.mysql.com/doc/refman/5.0/en/if-statement.html
Daar zie je dat de structuur sowieso werkt met IF ... THEN ... END IF

Daarnaast vraag ik me af of dit mag. Je hebt geen IF-queries. Deze zijn eigenlijk altijd opgenomen binnen een functie o.i.d.

Wellicht moet je het anders doen:
DELETE FROM afmelden WHERE (naam={naam}) AND (datum={datum})
En dan gewoon afwachten hoeveel rijen hier uit komen met mysql_affected_rows?

Overigens: in SQL gebruik je single-quotes om alle waarden heen. Geen double-quotes. Dat het in MySQL werkt, ligt meer aan MySQL dan aan SQL zelf, want het is tegen de standaarden.
 
Terence Hersbach

Terence Hersbach

03/10/2009 11:34:00
Quote Anchor link
Ik vraag me ook een beetje af waarom je uberhaupt met If-statements werkt, denk dat het niet echt nodig is. Ik vraag me ook af of je je data goed opslaat.

Ik zou niet naar afmeldingen kijken, maar naar aanmeldingen. Daarbij heb je zo te zien gebruikers, en kan je die dus koppelen met enkelt een koppeltabel aan de hand van de userid en niet de naam.
 
Jan Willem van der Veer

Jan Willem van der Veer

03/10/2009 12:52:00
Quote Anchor link
Quote:
Ik zou niet naar afmeldingen kijken, maar naar aanmeldingen.
In dat geval moet je eerst vragen naar wat voor situatie het is. Stel dat het gaat om bijeenkomsten waar eigenlijk altijd iedereen komt, dan is het logischer om je afmeldingen te noteren dan je aanmeldingen.
En ik heb ook het idee dat het hier echt gaat om `afmeldingen`. Dus er wordt van uit gegaan dat iedereen komt, maar degenen die zich afmelden komen bij de afmeldingen te staan. Maar wellicht kan de TS daar nog wat meer duidelijkheid over bieden.

In elk geval zijn we het eens dat die IF-structuur hier niet helemaal op zijn plek is :)
 
Robin

Robin

03/10/2009 13:15:00
Quote Anchor link
Oke, ik had ergens gelezen dat je op deze manier IF statements kon doen in mysql.

Het is inderdaad een script dat elke dinsdag en donderdag bijhoudt wie er NIET komt. Het is namelijk zo dat het de bedoeling is dat verder iedereen komt en de mensen die echt niet kunnen moeten zich afmelden.

Ik heb een script gemaakt met radio-buttons, dus per dag kun je je bijvoorbeeld tot 5 uur 's middags afmelden, die dagen worden automatisch ververst.

Het ziet er zo uit:
------
Dinsdag 6 oktober
[button - standaard aangekruisd] Aanmelden
[button] afmelden

Donderdag 8 oktober
[button - standaard aangekruisd] Aanmelden
[button] afmelden

etc.
[submit]
-----------
Als je 'afmelden aankruist, maakt ie een record aan dat je je afmeldt, als je je nog niet hebt afgemeld (vandaar if not exists)
Als je je aanmeldt, moet ie je afmelding weer deleten (if exists, delete record)

Ik had het eerst gecheckt met een query of die bestaat en dan met
mysql_num_rows() gekeken of die records terug geeft, en dan vervolgens deleten of invoeren. Alleen ik kreeg naar mijn idee veel queries op 1 pagina en vond dat het wel minder kon.

Groet,
Robin
Gewijzigd op 01/01/1970 01:00:00 door Robin
 



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.