J'ai des données stockées dans une table de base de données, avec un horodatage automatique. Dans un module, je souhaite ensuite afficher un résultat basé sur le dernier horodatage.
Cela ne fonctionne pas et je reçois une erreur
Warning: strtotime() expects parameter 1 to be string
La requête que j'ai écrite est:
//Get Latest Update TimeStamp
$db = JFactory::getDBO();
$query = "SELECT MAX( timestamp )
FROM #__service_status ORDER BY timestamp DESC LIMIT 1";
$db->setQuery( $query);
$timestamp = strtotime($db);
Ensuite, j'essaie d'y faire écho avec:
<?php echo date("m-d-Y", $timestamp);?>
Vous devez ajouter ceci dans votre code, après $ db-> setQuery ($ query);
$db->setQuery( $query);
$var1= $db->loadResult();
$timestamp = strtotime($var1);
J'espère que cette aide
MySQL fournit déjà les outils appropriés pour reformater la valeur de votre horodatage. Je vous recommande donc vivement d'encapsuler DATE_FORMAT () autour de votre appel MAX()
.
SELECT DATE_FORMAT(MAX(timestamp), '%m-%d-%Y') AS `formatted` FROM `service_status`
MAX()
fournit une requête plus succincte que ORDER BY timestamp DESC LIMIT 1
qui fournira également le résultat souhaité.
SELECT DATE_FORMAT(timestamp, '%m-%d-%Y') AS formatted FROM `service_status` ORDER BY timestamp DESC LIMIT 1
Les lessions à emporter sont:
MAX()
et ORDER BY timestamp DESC LIMIT 1
.strtotime()
& date()
) en reformatant votre requête.Le produit final cuit peut ressembler à ceci:
$db = JFactory::getDBO();
try {
$query = $db->getQuery(true)
->select("DATE_FORMAT(MAX(timestamp), '%m-%d-%Y')")
->from("#__service_status");
// echo $query->dump(); // uncomment if you want to see what is generated
$db->setQuery($query);
if (!$result = $db->loadResult()) { // declare $result then check for a "falsey" value
echo "No Rows Found";
} else {
echo "Last update was $result";
}
} catch (Exception $e) {
echo "Syntax Error"; // , $e->getMessage(); // <- don't show these details publicly
}
* Puisqu'une seule valeur est renvoyée, j'ai supprimé l'alias de colonne que j'ai mentionné pour la première fois dans ma requête SQL brute - loadResult()
ne se soucie pas de savoir comment le champ est appelé.
* timestamp
est un mot-clé mysql, mais ce n'est pas un mot-clé réservé, il ne le fait pas besoin à être encapsulé dans des backticks.