web-dev-qa-db-fra.com

Obtenir l'horodatage de la base de données

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);?>
4
RustyJoomla

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

3
Piero Marsilio

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`

Démo SQLFiddle

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:

  1. Vous n'avez pas besoin de la logique redondante de MAX() et ORDER BY timestamp DESC LIMIT 1.
  2. Vous pouvez épargner quelques appels de fonction de date php (à savoir: 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.

1
mickmackusa