Op het moment ben ik bezig om voor bepaalde onderwerpen van de website een RSS feed te maken. Dit lukt op het moment helemaal na wens, alleen loop ik tegen een probleem aan bij <pubDate>.

Mijn RSS word opgebouwd door middel van een database en SimpleXML. Zover ik kan lezen op internet houd de <pubDate> er een speciale date opbouw op na. Alleen weet ik dus niet hoe ik die moet op vragen in mijn Query.

Ik weet wel dat je door middel van:
DATE_FORMAT( p_date, '%d-%m-%Y' ) AS p_date

Een date na wens opbouw op te vragen, alleen de opbouw voor in de Query die ik nodig heb kan ik niet vinden. De opbouw die ik terug zal moeten krijgen is:
D, d M Y H:i:s T

Deze opbouw is dus voor de RSS item tag <pubDate>

Ik heb de volgende Query opbouw geprobeerd, omdat ik dacht het wel zal kloppen:
DATE_FORMAT( p_date, '%D, %d %M %Y %H:%i:%s %T' ) AS p_date

Maar dat ging niet en krijg ik nog steeds de melding dat de pubDate niet correct is.

Mijn vraag is dus: Hoe moet de opbouw in de Query zijn op tot het gewenste result te kunnen komen.

Je krijgt zoiets uit je query:
Sun, 06 Jul 2012 09:12:34 09:12:34
Mysql kent geen timezone part in een datum, dus wellicht zoiets:

SELECT DATE_FORMAT(p_date, '%D, %d %M %Y %T UTC) AS pubdate FROM .....
Ger, bedankt voor de reactie.
Alleen deze blijkt niet te werken. Ik krijg dan een lege feed terug.
Als ik met een Feed Validator kijk, krijg ik niet een duidelijke melding terug waar het dan mis gaat.
Echo de output van de query eens voordat je deze in je feed stopt, en controleer dan of hij wel het gewenste resultaat geeft?
Joren,

Als ik de Query echo krijg ik volgende melding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:..\rss\megaschijf.rss.php on line 39
SELECT id, artiest, titel, cover, weeknr, DATE_FORMAT(p_date, '%D, %d %M %Y %T UTC) AS pubdate FROM single ORDER BY id DESC


Haal ik nu de DATE_FORMAT weg, dan krijg ik de gegevens die ik wil. Alleen dan zonder de post-date.
Je mist in ieder geval een ' in je DATE_FORMAT achter UTC.
Voor de melding maakt het helaas niet uit.
Die ' zag ik zelf ook idd.
Je controleert nu nog nergens of je query wel gelukt is, je stop het resultaat direct in mysql_num_rows() en die begint te zeuren. Doe altijd iets als:

<?php
$sql = '...';

if(!mysql_query($sql)) {
trigger_error(mysql_error().' In query: '.$sql);
}
else {
// ga verder met je script
}
?>
Joren, ik gebruik wel een fout afhandeling.
Ik gebruik de foutafhandeling van Wouter J op Github, dit samen met de connect naar db toe.

Ik zag net dat er bij het toevoegen van p_date in de database iets fout was gegaan.
Hij heeft de veld niet aan gemaakt. Ik heb hem nu aan gemaakt en het werkt nu wel.
Alleen hij pakt de p_date niet mee.

Complete code is HIER te vinden.
Als je foutafhandeling consequent gebruikt, verwacht ik niet de foutmelding die je nu krijgt. Je zou dan namelijk een foutmelding moeten krijgen op het uitvoeren van de query, dat is namelijk waar het fout gaat. En in dat geval biedt mysql_error() de mogelijkheid om een gedetailleerdere SQL foutmelding op te vragen en weer te geven.

Kortom, bij elke query die je uitvoert, zul je moeten controleren of hij gelukt is.

Reageren