sql >> Base de Datos >  >> RDS >> Mysql

Obtener diferencia de fechas

Es importante desarrollar sus consultas MySQL y perfeccionarlas fuera del contexto del código PHP primero, luego integrar la consulta una vez que funcione de la manera que lo necesita en una aplicación cliente MySQL como MySQL Workbench, PHPMyAdmin, etc.

En su consulta, el exterior SELECT no es necesario, y la consulta interna en sí parece casi correcta, pero es la forma en que intenta ejecutarla con PDO lo que falla.

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

Ahora, para ejecutarlo en PDO, debe usar prepare()/bindParam()/execute() para crear una declaración preparada, vincular parámetros y ejecutarla con esos parámetros (aunque no puede vincular el nombre de la tabla, debe seguir siendo una variable). En su código actual, tiene una confusión de PDO::query() método utilizado para consultas estáticas simples y PDOStatement::execute() método que se utiliza para ejecutar una declaración preparada. Debería usar el método de declaración preparada, en lugar de 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);

Siempre recomiendo pasar tiempo con este tutorial de PDO para desarrolladores de MySQL que coloca el uso de PDO en el contexto del antiguo mysql_*() API con la que quizás ya estés familiarizado.