Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj różnicę dat

Ważne jest, aby najpierw opracować zapytania MySQL i udoskonalić je poza kontekstem kodu PHP, a następnie zintegrować zapytanie, gdy już działa tak, jak chcesz, w aplikacji klienckiej MySQL jak MySQL Workbench, PHPMyAdmin itp.

W zapytaniu zewnętrzny SELECT nie jest potrzebne, a samo zapytanie wewnętrzne wygląda prawie poprawnie, ale sposób, w jaki próbujesz je wykonać za pomocą PDO, jest błędny.

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

Teraz, aby wykonać go w PDO, powinieneś użyć prepare()/bindParam()/execute() aby utworzyć przygotowaną instrukcję, powiąż parametry i wykonaj ją z tymi parametrami (nie możesz jednak powiązać nazwy tabeli - musi ona pozostać zmienną). W twoim obecnym kodzie masz mieszankę PDO::query() metoda używana do prostych zapytań statycznych i PDOStatement::execute() metoda, która służy do wykonania przygotowanej instrukcji. Powinieneś używać metody przygotowanej instrukcji, a nie 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);

Zawsze polecam spędzanie czasu z tym samouczkiem PDO dla programistów MySQL co umieszcza użycie PDO w kontekście starego mysql_*() API, które być może już znasz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas instalacji Mysql2 gem-10.6 Server

  2. JDBC:klucz obcy na PK utworzony w tej samej transakcji

  3. UNIKALNE Ograniczenie, tylko gdy pole zawiera określoną wartość

  4. Jak dodać sterownik JDBC do potoku Jenkins?

  5. Objective-C i MySQL