Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni la differenza di data

È importante sviluppare le query MySQL e perfezionarle prima al di fuori del contesto del codice PHP, quindi integrare la query una volta che funziona nel modo desiderato per in un'applicazione client MySQL come MySQL Workbench, PHPMyAdmin, ecc.

Nella tua query, l'esterno SELECT non è necessario e la query interna stessa sembra quasi corretta, ma è il modo in cui tenti di eseguirla con PDO che è difettosa.

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

Ora per eseguirlo in PDO, dovresti usare prepare()/bindParam()/execute() per creare un'istruzione preparata, associare i parametri ed eseguirla con quei parametri (non è possibile tuttavia associare il nome della tabella, che deve rimanere una variabile). Nel tuo codice attuale, hai un miscuglio di PDO::query() metodo utilizzato per semplici query statiche e PDOStatement::execute() metodo che viene utilizzato per eseguire un'istruzione preparata. Dovresti usare il metodo dell'istruzione preparata, piuttosto che 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);

Consiglio sempre di dedicare del tempo a questo tutorial PDO per sviluppatori MySQL che colloca l'utilizzo di PDO nel contesto del vecchio mysql_*() API che potresti già conoscere.