sql >> Databasteknik >  >> RDS >> Mysql

Få datumskillnad

Det är viktigt att utveckla dina MySQL-frågor och perfektionera dem utanför PHP-kodens sammanhang först, sedan integrera frågan när du har fått den att fungera som du behöver den i en MySQL-klientapplikation som MySQL Workbench, PHPMyAdmin, etc.

I din fråga, den yttre SELECT behövs inte, och själva den inre frågan ser nästan korrekt ut, men det är sättet du försöker köra den med PDO som är felaktigt.

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

För att nu köra det i PDO bör du använda prepare()/bindParam()/execute() för att skapa en förberedd sats, binda in parametrar och köra den med dessa parametrar (du kan dock inte binda tabellnamnet - det måste förbli en variabel). I din nuvarande kod har du en blandning av PDO::query() metod som används för enkla statiska frågor och PDOStatement::execute() metod som används för att utföra ett förberett uttalande. Du bör använda den preparerade satsmetoden snarare än 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);

Jag rekommenderar alltid att du spenderar tid med denna PDO-handledning för MySQL-utvecklare som placerar PDO:s användning i sammanhanget med den gamla mysql_*() API som du kanske redan är bekant med.



  1. Mjukvaruföretag som arbetar med Oracle D2k, PLSQL Technologies i Noida

  2. SQL Skapa tabellberoenden

  3. MySQL Innodb Crash

  4. psycopg2 kan inte se min PostgreSQL-instans