Foutmelding
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in....
er wordt verwezen naar de while regel in de foutmelding. De veroorzaker is de where regel in mijn select. als ik die regel weg haal, werkt het script normaal. weet iemand wat ik hier fout doe?
mijn bedoeling is dat alleen een record uit de database geselecteerd wordt als de einddatum over 60 dagen is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?PHP
$zestig_dagen_terug = mktime() - 60;
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '.$zestig_dagen_terug'");
include 'functions.php';
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdate = date_create($row["ingangdatum"]);
$einddate = date_create($row["einddatum"]);
$ingangdatum = date_format($ingangdate, 'd-m-Y');
$einddatum = date_format($einddate, 'd-m-Y');
echo $naam . ' ' . $ingangdatum . ' t/m ' . $einddatum . '<BR/>';
?>
$zestig_dagen_terug = mktime() - 60;
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '.$zestig_dagen_terug'");
include 'functions.php';
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdate = date_create($row["ingangdatum"]);
$einddate = date_create($row["einddatum"]);
$ingangdatum = date_format($ingangdate, 'd-m-Y');
$einddatum = date_format($einddate, 'd-m-Y');
echo $naam . ' ' . $ingangdatum . ' t/m ' . $einddatum . '<BR/>';
?>
http://github.com/WouterJ/sql-boilerplate/blob/master/MySQL , en je ult zien wat er fout gaat.
Waarschijnlijk gaat er iets fout in je query. Voeg goede foutafhandeling, zoals je kunt zien op ik vind het echt vreemd, want het hele script werkt, behalve als ik de WHERE regel toevoeg.
https://github.com/WouterJ/sql-boilerplate/tree/master/mysql
Doe in elk geval je vars buiten quotes.
Daarnaast: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
Dat werkt denk wat beter :)
De link van Wouter J: Doe in elk geval je vars buiten quotes.
Daarnaast: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
Dat werkt denk wat beter :)
Wouter W op 03/09/2012 14:10:21:
bedankt voor je reactie. alleen je link werkt niet.
ik vind het echt vreemd, want het hele script werkt, behalve als ik de WHERE regel toevoeg.
ik vind het echt vreemd, want het hele script werkt, behalve als ik de WHERE regel toevoeg.
Niets vreemds aan, want die WHERE regel is waar het fout gaat. Die regel is namelijk fout en blaast je query op. Haal je die weg, dan werkt de query wel en gaat het goed.
Wat fout is, is die punt in de regel. Ofwel weghalen, ofwel (veel beter!) variabelen buiten quotes halen zoals hierboven al aangegeven.
Gewijzigd op 03/09/2012 16:16:56 door Erwin H
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '" . $zestig_dagen_terug . "'");
?>
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '" . $zestig_dagen_terug . "'");
?>
Gewijzigd op 03/09/2012 17:17:57 door Reshad F
Wouter W op 03/09/2012 17:14:12:
Wat zit er voor waarde in $zestig_dagen_terug dan?
Erwin H op 03/09/2012 17:24:59:
deze code:
dit om alleen de rijen te retourneren waarvan de einddatum over 60 dagen is.
Een datum in SQL dien je als string in te voeren. Dus je moet de datum formateren in de vorm yyyy-mm-dd. En dan als string, dus tussen quotes. Een getal zal je een warning opleveren, wat je had kunnen zien als je correcte foutafhandeling had gehad....
Een andere tip, probeer je queries eens in phpmyadmin of de commandline tool van MySQL. Is een stuk makkelijker om te testen en fouten te ontdekken.
ok, maar ik wil graag het weergegeven hebben als dd-mm-yyyy.
Daar heb je formatting formules voor (zowel php als sql). In de database staat het als yyyy-mm-dd.
Toevoeging op 03/09/2012 22:32:28:
DATE_FORMAT() in MySQL...
Daarnaast zou ik gewoon je datum in een DateTime object zetten. Kan je er alles mee wat je wilt.
DateTime object?? niet te snel luitjes, mijn vragen staan echt in "beginnen met PHP" :)
Gewoon DATE_FORMAT in je SELECT-query gebruiken. Genoeg leesvoer op Google...
Wouter W op 03/09/2012 22:59:19:
DateTime object?? niet te snel luitjes, mijn vragen staan echt in "beginnen met PHP" :)
Eerst en vooral, is je probleem intussen al opgelost? In elk geval, zou ik je wat gaan verdiepen in SQL. Je weet wel hoe er een select statement volledig uitziet, maar bent duidelijk nog niet op de hoogte van alle functies.
Vooral de datumfuncties moet je zeker eens grondig bekijken. Bekijk bijvoorbeeld dit artikel eens.
Overigens moet je echt geen schrik hebben om soms eens een class te gebruiken. Er is een verschil tussen object gericht programmeren en gebruik maken van classes. Dat laatste is vaak niet zo moeilijk.
Bekijk bijvoorbeeld eens de PHP Data/Time manual. Als je even wat rond klikt, en de voorbeelden bekijkt, zie je dat dit niet erg extreem moeilijk is.
Of je nu DateTime moet gebruiken of niet, kan ik niet gelijk bepalen uit dit topic. Als het werkelijk enkel gaat om iets in de WHERE dat met date te maken heeft, en nergens elders in de SELECT kan je het prima oplossen met de functies die MySQL biedt.
Gewijzigd op 03/09/2012 23:24:21 door Write Down
nu inhoudelijk, ik ga vandaag verder probere met DATA_FORMAT en post mijn uitkomst hier weer even.
DATE-FORMAT() ;-)
slipt of a finger :) je hebt helemaal gelijk. loop ik ook vaak tegen aan, hele kleine tikfoutjes en die zijn nou net funest hierin :)
- Aar - op 04/09/2012 08:55:26:
DATE-FORMAT() ;-)
Euh, DATE_FORMAT() ;-)