[PHP] Datum perikelen met de database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 178303

Topicstarter
Ik loop tegen het volgende aan:

Als ik 20-07-2006 in een datetime veld zet op een MS SQL server, dan werkt dit perfect (De format is d-m-Y ...).
Probeer ik 01-12-2006 erin te zetten, dan wordt dit opeens door de database omgegooid naar 12-01-2006, wat dus problemen opleverd.
Hetzelfde geld voor 02-12-2006, maar niet voor 03-12-2006 en verder.

Als ik de query die PHP uitvoert, uitvoer op de MS SQL server zelf, dan gaat het wel goed.


Heeft iemand hier ervaringen mee?
Bij voorbaat dank.

Acties:
  • 0 Henk 'm!

Anoniem: 18686

Je kunt mbv CONVERT() in een MS SQL Query het datum formaat hard invoeren. Alleen die getallen zijn me niet helemaal duidelijk. Ik weet wel het getal voor formaat yyyy-mm-dd:

UPDATE tabel SET veld=CONVERT(DATETIME,'2006-07-19',120) WHERE bla=1;

Acties:
  • 0 Henk 'm!

  • Brupje
  • Registratie: September 2001
  • Laatst online: 09-06 20:10

Brupje

3D nerd

is het niet zo dat je direct 2006-01-01 y-m-d erin kunt stoppen?

Zie ook 123-3D voor 3D-printer stuff


Acties:
  • 0 Henk 'm!

Anoniem: 178303

Topicstarter
Dat kan inderdaad, maar dan zit ik nog met hetzelfde probleem helaas.
Ook het gebruik maken van de Convert functie bied tot nu toe geen oplossing. In principe zou het niet moeten uitmaken of ik 120 of 110 gebruik voor die functie (http://msdn2.microsoft.com/en-us/library/ms187928.aspx).

Ik word er helemaal gek van in ieder geval.

[ Voor 1% gewijzigd door Anoniem: 178303 op 19-07-2006 16:20 . Reden: typfout ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Biedt de library die je gebruikt voor MSSQL geen mogelijkheid voor parametriseren? Dat zou het oplossen.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Wanneer je MSSQL datums in XML-notatie aanbiedt ('yyyy-MM-dd', of 'yyyy-MM-ddThh:mm:ss' wanneer je ook de tijd wilt meegeven), verslikt 'ie zich daar niet in. Ongeacht de regional settings van de database server, en zonder dat je convert() hoeft te gebruiken. Dit is ook de manier die ADO en ADO.NET gebruiken bij uitvoer naar en invoer vanuit XML, en werkt ook prima in TSQL (je gewone select/insert/update/delete queries).

Maar de boel parametriseren is natuurlijk altijd de beste optie.

[ Voor 29% gewijzigd door Anoniem: 14829 op 19-07-2006 19:58 ]


Acties:
  • 0 Henk 'm!

Anoniem: 178303

Topicstarter
Met behulp van een CONVERT en enkele aanpassingen in hoe de code de verschillende meegegeven variabelen interpreteerd is het me nu gelukt.

Bedankt voor de reply´s!

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Heb je een voorbeeldje van hoe je het voor elkaar hebt gekregen?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Anoniem: 178303

Topicstarter
Dit gebruik ik in de sql query:
CONVERT(DATETIME,'" . substr($_GET["veld"], -4) . "-" . substr($_GET["veld"], 3, 2) . "-" . substr($_GET["veld"], 0, 2) . "',110)

Maar ik kwam erachter dat er vooraf ook iets raars gebeurde.
In het veld kan ook 0 of 1 staan, dit gebruik ik om checkboxen te onderscheiden. Hier controleer ik dus ook op. En kennelijk bij een datum als 01-07-2006 dan komt hij door deze controle heen (met 03-07-2006 dus niet). Hierdoor werd dus ook een iets andere query uitgevoerd, zonder de CONVERT.

Vooraf heb ik dan ook maar een extra controle ingebouwd om dit probleem te voorkomen, dit door het meegeven van een extra variabele die aangeeft dat het een checkbox is.

Is het nog te volgen? 8)7
Pagina: 1