Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[php+mysql]Query werkt ineens niet meer na verhuizing server

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb mijn website van server verhuisd (1 op 1) en na de verhuizing werkt ineens 1 specifieke query niet meer, ik heb al alle afgezocht wat dit kan zijn maar ik kan niets vinden.

Er komt geen error, er komt alleen geen waarde retour.
De query is:

PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(NOW(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");


Deze query heeft dus altijd gewerkt op de oude server, maar nu op de nieuwe server niet meer.
Het vreemde is als ik de NOW() vervang door de datum er hard in te zetten dan doet iet het wel, echter zodra ik NOW() gebruik niet meer.

Het vreemde ook is dat als ik de functie "date{Y-m-d);" gebruik er 0 terug komt en niet de datum

Iemand een idee hoe dit kan?

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:52

MueR

Admin Devschuur® & Discord

is niet lief

Lijkt mij een brak geconfigureerde server.

Anyone who gets in between me and my morning coffee should be insecure.


  • JasperE
  • Registratie: December 2003
  • Laatst online: 11-11 22:45
Ik heb eerder gelezen over een soortgelijk probleem. Daar lag de oplossing in het toepassen van de CAST() functie.

http://dev.mysql.com/doc/.../date-and-time-types.html
Prior to MySQL 5.0.42, when DATE values are compared with DATETIME values the time portion of the DATETIME value is ignored. Starting from MySQL 5.0.42, a DATE value is coerced to the DATETIME type by adding the time portion as '00:00:00'. To mimic the old behavior, use the CAST() function to perform the comparison in the following way:

date_col = CAST(NOW() as DATE);

[ Voor 5% gewijzigd door JasperE op 23-03-2008 01:32 ]


  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op zondag 23 maart 2008 @ 01:26:
Het vreemde ook is dat als ik de functie "date{Y-m-d);" gebruik er 0 terug komt en niet de datum
2 fouten in je date functie, maak er dit eens van :

PHP:
1
echo date('Y-m-d');


Zie de quotes en de ( ipv de {. Staat display_errors wel aan en op E_ALL ?

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Wat Cartman! zegt: zet bovenaan je PHP file eens:
PHP:
1
<?php ERROR_REPORTING(E_ALL); ?>

En misschien is er iets fout met je MySQL query zelf, maak er eens van:
PHP:
1
<?php $result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(NOW(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'") or die(mysql_error()); ?> 

Verwijderd

Topicstarter
Nee er is geen fout met de query, ook wordt er geen fout gegeneerd of weer gegeven als ik error reporting aanzet of een die (mysql_error()) meegeef, het script loopt netjes door.

Zodra ik echter NOW() gebruik in de query komt er geen resultaat terug (dus geen error), zodra ik een datum in geef bv vandaag: '2008-03-24' dan werkt de query wel.
Voordat de site van server is verhuisd heeft dit NOW() gedeelte altijd perfect gewerkt, dit script draait al een jaar of 3 ongewijzigd.

Correctie vorig reply:
de date functie in php zelf werkt wel, en dat het ( ipv { moest zijn snap ik, dat was een typo in mijn bericht hier.

Het enige wat niet werkt is dus het "NOW()" gedeelte:
PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(NOW(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");


gebruik je het op de volgende manier dan doet ie het wel:
PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD('2008-03-24', INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");


of op deze manier werkt het ook:
PHP:
1
2
$date = date("Y-m-d");
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD('$date', INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");

  • M55
  • Registratie: September 2003
  • Niet online

M55

En als je ipv Now() => DATE(Now()) gebruikt ?

PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(DATE(NOW()), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");

[ Voor 63% gewijzigd door M55 op 24-03-2008 10:12 ]


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op maandag 24 maart 2008 @ 00:32:
Nee er is geen fout met de query, ook wordt er geen fout gegeneerd of weer gegeven als ik error reporting aanzet of een die (mysql_error()) meegeef, het script loopt netjes door.

Zodra ik echter NOW() gebruik in de query komt er geen resultaat terug (dus geen error), zodra ik een datum in geef bv vandaag: '2008-03-24' dan werkt de query wel.
Voordat de site van server is verhuisd heeft dit NOW() gedeelte altijd perfect gewerkt, dit script draait al een jaar of 3 ongewijzigd.

Correctie vorig reply:
de date functie in php zelf werkt wel, en dat het ( ipv { moest zijn snap ik, dat was een typo in mijn bericht hier.

Het enige wat niet werkt is dus het "NOW()" gedeelte:
PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(NOW(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");


gebruik je het op de volgende manier dan doet ie het wel:
PHP:
1
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD('2008-03-24', INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");


of op deze manier werkt het ook:
PHP:
1
2
$date = date("Y-m-d");
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD('$date', INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");
Staat de server datum wel goed?

Programmer - an organism that turns coffee into software.


  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 08:32

CyBeRSPiN

sinds 2001

LuCarD schreef op maandag 24 maart 2008 @ 10:41:
[...]


Staat de server datum wel goed?
^^ dat, of anders het standaard datum-formaat van de MySQL server.

Verwijderd

Topicstarter
Ja datum en tijd staat goed, anders zou ik denk ik ook een verkeerde waarde met de date functie van PHP retour moeten krijgen


Met DATE(Now()) werkt de query wel, vreemd he....

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op maandag 24 maart 2008 @ 00:32:
Nee er is geen fout met de query, ook wordt er geen fout gegeneerd of weer gegeven als ik error reporting aanzet of een die (mysql_error()) meegeef, het script loopt netjes door.
Je weet pas dat de query niet fout is als je weet wat de oorzaak van dit probleem is. Dat weet je niet, dus lijkt het me niet slim om te stellen dat de query goed is.

Kijk eens wat "select DATE_ADD(NOW(), INTERVAL 8 DAY)" opleverd.

Verwijderd

Topicstarter
Ik weet niet of je de topic gelezen hebt maar dat is dus letterlijk de query welk ik gebruik en dus NIET meer werkt nadat ik van server ben verhuisd.

Verander je NOW() in de harde datum of zoals M55 aangeeft in DATE(Now()) dan doet ie het wel weer. Dit is 100% geen query/script fout daar zoals ik al aangaf de query 3 jaar gewerkt heeft op de oude server, ook werkt de query daar nu nog steeds (heb nog steeds toegang tot die server).

Ergens is een bug/verandering in de mysql/php versie geslopen waardoor de NOW() ineens niet meer werkt. Maar goed met de work around werkt het script weer, dat is het belangrijkste.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op maandag 24 maart 2008 @ 15:39:
Ik weet niet of je de topic gelezen hebt maar dat is dus letterlijk de query welk ik gebruik en dus NIET meer werkt nadat ik van server ben verhuisd.
Ik heb het topic gelezen en dat is niet de query die je gebruikt. Het is wel een onderdeel van de query ja, maar ik heb nergens gelezen dat je dat onderdeel als aparte query hebt getest en wat daar dan de uitvoer van was.
Verander je NOW() in de harde datum of zoals M55 aangeeft in DATE(Now()) dan doet ie het wel weer. Dit is 100% geen query/script fout daar zoals ik al aangaf de query 3 jaar gewerkt heeft op de oude server, ook werkt de query daar nu nog steeds (heb nog steeds toegang tot die server).
En waarom zou het dus geen fout in de query kunnen zijn?
Het zou inderdaad best kunnen dat je op de nieuwe server een andere versie van MySQL gebruikt dan op de oude. Maar ik heb nog geen versienummers voorbij zien komen.

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Ook al eens je query laten echo'en om deze vervolgens in PMA uit te proberen, en zo misschine wel een duidelijke foutmelding te krijgen ?

  • Speedener
  • Registratie: September 2000
  • Laatst online: 19-11 16:08
En wat gebeurt er als je CURRENT_DATE gebruikt ipv NOW ?
PHP:
1
2
3
<?php
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(CURRENT_DATE(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'");
?>


edit:
Je kan ook nog proberen de error te echo-en:
PHP:
1
2
3
<?php
$result = mysql_query("SELECT * FROM abo WHERE betaaldatum = DATE_ADD(CURRENT_DATE(), INTERVAL 8 DAY) and status != '3' and renewcontract = '0'") or die(mysql_error());
?>


edit 2:
o, het was al 'opgelost'

[ Voor 38% gewijzigd door Speedener op 24-03-2008 18:07 ]

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


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op maandag 24 maart 2008 @ 15:39:Dit is 100% geen query/script fout
...
Ergens is een bug/verandering in de mysql/php versie geslopen waardoor de NOW() ineens niet meer werkt. Maar goed met de work around werkt het script weer, dat is het belangrijkste.
Nee, dat is dus geen work around, maar dat is gewoon zelf netjes omgaan met types. Als je zelf dus wel altijd zorgt dat je correct een date neerzet als dat verwacht wordt, heb je nooit dit soort problemen. ;)

Je had vroeger dus enkel het geluk dat de impliciete conversie naar wens was. :)

{signature}


  • M55
  • Registratie: September 2003
  • Niet online

M55

Wellicht dat dit nog relevant is:
http://bugs.mysql.com/bug.php?id=28929

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-11 12:51

glashio

C64 > AMIGA > PC

code:
1
status <> '3'
i.p.v.
code:
1
status != '3'
?

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Al eens op PHPMyAdmin ingetikt?

Going for adventure, lots of sun and a convertible! | GMT-8


  • JasperE
  • Registratie: December 2003
  • Laatst online: 11-11 22:45
En het aanroepen van de cast functie uit de 2e reply werkt ook niet?
Alhier een probleem dat er erg op lijkt: http://blog.dixo.net/2007...using-between-with-dates/

Verwijderd

Topicstarter
Nou als ik de query met NOW() in phpmyadmin draai krijg ik als antwoord: o rijen gevonden
Dus geen foutmelding gewoon NIETS gevonden!

Verander ik de NOW() dan weer in de '2008-03-24' of in CURRENT_DATE() of in DATE(Now()) dan krijg ik in PMA dus wel gewoon een aantal gevonden resultaten terug!

Nogmaals ALLES werkt behalve als je NOW() gebruikt!

versie verschillen tussen de 2 servers:
oude server: 5.0.37 + PHP 5.2.3
nieuwe server: 5.0.51a + PHP 5.2.5

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

SQL:
1
SELECT NOW() FROM dual;

SQL:
1
SELECT DATE(NOW()) FROM dual;


Wat geeft dat?

Going for adventure, lots of sun and a convertible! | GMT-8


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Snake schreef op maandag 24 maart 2008 @ 23:05:
SQL:
1
SELECT NOW() FROM dual;

SQL:
1
SELECT DATE(NOW()) FROM dual;


Wat geeft dat?
MySQL is geen Oracle :)

Maar goed, het is een beetje vaag probleem. NOW() geeft een datum terug gebaseerd op de huidige timezone.
Staat die wel correct ingesteld?

http://dev.mysql.com/doc/...en/timezone-problems.html

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Snake schreef op maandag 24 maart 2008 @ 23:05:
SQL:
1
SELECT NOW() FROM dual;

SQL:
1
SELECT DATE(NOW()) FROM dual;


Wat geeft dat?
from dual?
Ik begrijp hem niet helemaal

  • b19a
  • Registratie: September 2002
  • Niet online
Als je "from dual" even vergeet, en dan de output van beide queries vergelijkt?

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

LuCarD schreef op dinsdag 25 maart 2008 @ 00:05:
[...]


MySQL is geen Oracle :)

Maar goed, het is een beetje vaag probleem. NOW() geeft een datum terug gebaseerd op de huidige timezone.
Staat die wel correct ingesteld?

http://dev.mysql.com/doc/...en/timezone-problems.html
Werkt perfect hier in MySQL 5.1 RC :)

Going for adventure, lots of sun and a convertible! | GMT-8


  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

openpost
Ik heb mijn website van server verhuisd (1 op 1) en na de verhuizing werkt ineens 1 specifieke query niet meer, ik heb al alle afgezocht wat dit kan zijn maar ik kan niets vinden.
en in post #20 pas
versie verschillen tussen de 2 servers:
oude server: 5.0.37 + PHP 5.2.3
nieuwe server: 5.0.51a + PHP 5.2.5
voortaan is het misschien handig om dat dan ook in je 1e post te vermelden :)

dit is namelijk typisch een upgrade probleem van versies van PHP en MySQL. Het is dan ook niet 1 op 1 verhuist, waarmee je impliceerd dat dit ook hetzelfde is gebleven.

Death smiles at us all, all a man can do is smile back.
PSN


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Verwijderd schreef op dinsdag 25 maart 2008 @ 00:37:
[...]


from dual?
Ik begrijp hem niet helemaal
Dual is een soort dummy tabel in Oracle databases, voor als je waardes wilt selecteren die niet in een bepaalde tabel of view staan. Je moet daar namelijk een 'from' clausule hebben.

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
@Yakuza:
Het is geen server upgrade zoals je suggereert
De site is letterlijk 1 op 1 van een server oude specs naar een ANDERE server verhuisd met de nieuwere specs, dus op andere hardware bij een andere host!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 25 maart 2008 @ 13:39:
... van een server oude specs naar een ANDERE server verhuisd met de nieuwere specs...
En hoe is dat geen upgrade :?
Je bent naar een nieuwere MySQL gegaan en naar een nieuwere PHP. Dat is toch echt een upgrade; ook al heb je alleen maar je site verhuisd (ik neem aan dat je de .php bestanden e.d. hebt gekopieerd naar de nieuwe server; dan heb jij feitelijk misschien geen upgrade uitgevoerd, maar dat zal je php bestanden en SQL queries worst wezen; ze worden nu onder een nieuwere versie uitgevoerd. basta).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Dat suggereert hij niet, hij suggereert dat er op de server een upgrade is uitgevoerd en dat is niet het geval, dat is wat ik wil aangeven ermee. En dan nog is er geen reden dat NOW() niet zou werken als er al een server upgrade zou zijn geweest wegens PHP of MYSQL versie verschillen, in beide versies is NOW() een gewoon een standaard functie wat zou moeten werken.

  • M55
  • Registratie: September 2003
  • Niet online

M55

Ja, maar Now() geeft een timestamp terug een geen datum, zoals al eerder hier werd gemeld.

Probleem is toch opgelost nu ? ;-)

Verwijderd

Topicstarter
ja is opgelost via een work around, maar er is nog steeds geen oorzaak gevonden waarom het ineens niet werkt.
De query is correct, er zitten geen fouten in en heeft (en werkt op de vorige server nog steeds) altijd goed gewerkt, het kan niet zijn dan NOW() voorheen een date retour gaf en nu ineens een timestamp.
Als dat het geval zou zijn dan zou de query ook niet op de oude server gewerkt moeten hebben daar er een de query niets is veranderd.

Maar goed het probleem is voor mij opgelost, sluit het topic maar.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op woensdag 26 maart 2008 @ 01:32:
ja is opgelost via een work around, maar er is nog steeds geen oorzaak gevonden waarom het ineens niet werkt.
De query is correct, er zitten geen fouten in
Wat doe je nou moeilijk, in de derde post van dit topic staat je probleem al aangegeven, wat exact blijkt te kloppen met de versienummers die je opgeeft waar je tussen gemigreerd bent.

Die query zoals je 'm in je startpost geeft is incorrect en bevat een brute fout: je vergelijkt een datum met een datetime. Draai voor de lol eens de volgende query:
SQL:
1
select cast('2008-03-27' as Date), date_add(now(), interval 1 day)

Hieruit komt op een willekeurige 5.1 server op het moment dat ik deze post typ:
2008-03-272008-03-27 02:03:10

Als jij kunt verdedigen dat deze 2 waardes hetzelfde zijn: doe je best. MySQL dacht voor versie 5.0.41 van wel, en deze bug is inmiddels gefixt. In de versie die op jouw nieuwe server draait.

Professionele website nodig?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 26 maart 2008 @ 01:32:
ja is opgelost via een work around
Zoals ik eerder zei, is het geen work around, maar juist good practice.
Voutloos schreef op maandag 24 maart 2008 @ 18:05:
[...]
Nee, dat is dus geen work around, maar dat is gewoon zelf netjes omgaan met types. Als je zelf dus wel altijd zorgt dat je correct een date neerzet als dat verwacht wordt, heb je nooit dit soort problemen. ;)

Je had vroeger dus enkel het geluk dat de impliciete conversie naar wens was. :)

{signature}

Pagina: 1