Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir la différence de date

Il est important de développer vos requêtes MySQL et de les perfectionner en dehors du contexte du code PHP d'abord, puis d'intégrer la requête une fois qu'elle fonctionne comme vous en avez besoin dans une application cliente MySQL comme MySQL Workbench, PHPMyAdmin, etc.

Dans votre requête, le SELECT extérieur n'est pas nécessaire, et la requête interne elle-même semble presque correcte, mais c'est la façon dont vous essayez de l'exécuter avec PDO qui est défectueuse.

SELECT
  due_date,
  date_paid,
  DATEDIFF(due_date, date_paid) as date_interval
FROM $tbl_name
WHERE
  DATEDIFF(due_date, date_paid) <= $setDay
ORDER BY trans_id DESC
LIMIT $start, $limit

Maintenant, pour l'exécuter dans PDO, vous devez utiliser prepare()/bindParam()/execute() pour créer une instruction préparée, lier les paramètres et l'exécuter avec ces paramètres (vous ne pouvez cependant pas lier le nom de la table - cela doit rester une variable). Dans votre code actuel, vous avez un mélange du PDO::query() méthode utilisée pour les requêtes statiques simples et le PDOStatement::execute() méthode utilisée pour exécuter une instruction préparée. Vous devriez utiliser la méthode d'instruction préparée, plutôt que query() .

// Setup the statement with named parameters like :setDay
$sql = "
    SELECT
      due_date,
      date_paid,
      DATEDIFF(due_date, date_paid) as date_interval
    FROM $tbl_name
    WHERE
      DATEDIFF(due_date, date_paid) <= :setDay
    ORDER BY trans_id DESC
    LIMIT :start, :limit
";
// Make PDO throw useful errors on failure
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Prepare the statement
$stmt = $pdo->prepare($sql);

// Bind your 3 parameters and execute it
$stmt->bindParam(':setDay', $setDay, PDO::PARAM_INT);
$stmt->bindParam(':start', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();

// Fetch your rows returned from the query
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Do something with them
print_r($rows);

Je recommande toujours de passer du temps avec ce tutoriel PDO pour les développeurs MySQL qui place l'utilisation de PDO dans le contexte de l'ancien mysql_*() API que vous connaissez peut-être déjà.