[php-mySQL] December bug in script?!?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vanaf gister (1 dec) heb ik een bug in mijn script, ik heb gevonden waar het mis gaat:

code:
1
UPDATE count SET Dec ='$hits' WHERE jaarID='2002'


foutmelding:
code:
1
You have an error in your SQL syntax near 'Dec='23' WHERE jaarID='2002'' at line 1


Terwijl de volgende query wel werkt:
code:
1
UPDATE count SET Nov ='$hits' WHERE jaarID='2002'


Blijkbaar gaat het mis bij Dec.
Ik heb verschillende quotes al geprobeerd ed, maar kan hier geen oplossing voor vinden, kan iemand me helpen.?

Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
en de colom heet echt Dec?

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 29-08 17:38

robjanssen

Software Developer

Dec is waarschijnlijk een reserved keyword.
Gebruik eens [Dec] (dus met rechte haken eromheen)

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

DEC staat idd in de reserved words lijst van mysql :)

[ Voor 97% gewijzigd door TheRookie op 02-12-2002 20:40 . Reden: typo+quote -quote, sloeg bij nader inzien ergens anders op ]


Acties:
  • 0 Henk 'm!

Verwijderd

gebruik dit: `Dec` (backticks naast je 1)

Acties:
  • 0 Henk 'm!

  • Jelle Niemantsverdriet
  • Registratie: Februari 2000
  • Laatst online: 08:50
[rml][ MySQL] Wat is hier aan de hand???[/rml]
[rml]thomaske in "[ MYSQL] Syntax error?"[/rml]

voor de altijd terugkerende discussie of je wel of niet reserved words in je tabellen moet gebruiken. Sowieso doen de gegeven queries vermoeden dat je je data-model wellicht nog iets kunt verbeteren...

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:20
Wat betreft reserved words: als het inderdaad zo is (zoals in dat andere topic beweerd werd) dat tussen MySQL versies die lijst van reserved words kan variëren, dan is het toch niet mogelijk om te garanderen dat je queries altijd geldig blijven. Dan kun je het wat mij betreft laten en gewoon de meest zinnige namen voor je tabellen en kolommen kiezen; als dat een keer 'from' is: het zij zo.

Het is sowieso geen slecht idee om altijd je identifiers te 'quoten' met backticks, dan is ten eerste direct duidelijk wat de identifiers in de query zijn en ten tweede ben je van al het gezeur af: dat werkt namelijk voor alle identifiers, ongeacht of ze nu wel of niet reserved keywords zijn. Dan heb je ook de garantie dat al je queries 'altijd' blijven werken; al je queries testen wanneer je je database update is in het algemene geval geen optie, omdat sommige queries alleen in uitzonderlijke situaties gebruikt kunnen worden en het niet gezegd is dat een foute interpretatie ook een syntax error oplevert.

Het is eigenlijk jammer dat SQL dat zelf niet vereist, maar er is zoveel mis met de SQL syntax dat dit er ook wel bij kan.

[ Voor 17% gewijzigd door Soultaker op 02-12-2002 22:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Allemaal bedankt voor jullie reacties, die backticks werken, nu zit ik met de vraag wat het verschil tussen de aanhalingsteken en de backtick is, ik had Dec wel tussen het ' gezet.

Waneer pas je welke nu toe?

Wat betreft het database model, de kolommen hebben de namen van de maanden, de rijen zijn de jaren. Zo kan ik eenvoudig de hits per maand bijhouden.
Hebben jullie nog concrete tips over het db-model?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

1 maand jaar veld en 1 aantal veld

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Met die backticks geef je aan dat mysql niet zijn functies oid moet gebruiken, maar dat het een tabel/kolom naam is.

Wat betreft het db model: gebruik de search of een koop een boek, daar is echt zat over te vinden.
Daarnaast vraagt iedere situatie een andere aanpak.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

code:
1
2
ID    (integer, unique)
Hits (integer)

ID bestaat uit: jaar + maand
Voorbeeld:
200206 > juni 2002
200211 > november 2002

edit:

En iedereen is me weer voor... :P
Janoz schreef op 02 December 2002 @ 22:32:
1 maand jaar veld en 1 aantal veld
Volgens mij kan je beter jaar en maand omdraaien; mocht je ooit nog willen sorteren....

[ Voor 52% gewijzigd door gorgi_19 op 02-12-2002 22:36 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kan natuurlijk ook een timestamp maken waarbij alleen de maand en jaar variabel zijn:

PHP:
1
$ts = mktime(0,0,0,$maand,1,$jaar);


Maar het is toch een oud script wat ik ergens in aan het zetten was. Toevallig was het net 1 Dec.
Pagina: 1