Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datumsdifferenz erhalten

Es ist wichtig, dass Sie Ihre MySQL-Abfragen entwickeln und sie zuerst außerhalb des Kontexts von PHP-Code perfektionieren und dann die Abfrage integrieren, sobald sie so funktioniert, wie Sie sie benötigen, in eine MySQL-Client-Anwendung wie MySQL Workbench, PHPMyAdmin usw.

In Ihrer Abfrage das äußere SELECT wird nicht benötigt, und die innere Abfrage selbst sieht fast korrekt aus, aber die Art und Weise, wie Sie versuchen, sie mit PDO auszuführen, ist fehlerhaft.

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

Um es jetzt in PDO auszuführen, sollten Sie prepare()/bindParam()/execute() Um eine vorbereitete Anweisung zu erstellen, binden Sie Parameter ein und führen Sie sie mit diesen Parametern aus (Sie können jedoch nicht den Tabellennamen binden - der muss eine Variable bleiben). In Ihrem aktuellen Code haben Sie eine Verwechslung von PDO::query() Methode für einfache statische Abfragen und PDOStatement::execute() Methode, die verwendet wird, um eine vorbereitete Anweisung auszuführen. Sie sollten statt query() die Methode der vorbereiteten Anweisung verwenden .

// 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);

Ich empfehle immer, Zeit mit diesem PDO-Tutorial für MySQL-Entwickler zu verbringen was die Verwendung von PDO in den Kontext des alten mysql_*() stellt API, mit der Sie vielleicht bereits vertraut sind.