sql >> Databáze >  >> RDS >> Mysql

Získejte rozdíl mezi datem

Je důležité nejprve vyvinout dotazy MySQL a zdokonalit je mimo kontext kódu PHP, a poté dotaz integrovat, jakmile bude fungovat tak, jak potřebujete, v klientské aplikaci MySQL jako MySQL Workbench, PHPMyAdmin atd.

Ve vašem dotazu vnější SELECT není potřeba a vnitřní dotaz sám o sobě vypadá téměř správně, ale způsob, jakým se jej pokoušíte provést pomocí PDO, je chybný.

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

Nyní, abyste jej provedli v PDO, měli byste používat prepare()/bindParam()/execute() vytvořit připravený příkaz, svázat parametry a provést jej s těmito parametry (nemůžete však svázat název tabulky - to musí zůstat proměnná). Ve vašem aktuálním kódu máte kombinaci PDO::query() metoda používaná pro jednoduché statické dotazy a PDOStatement::execute() metoda, která se používá k provedení připraveného příkazu. Měli byste používat metodu připraveného příkazu, spíše než 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);

Vždy doporučuji trávit čas s tímto výukovým programem PDO pro vývojáře MySQL což umisťuje použití PDO do kontextu starého mysql_*() API, které již možná znáte.



  1. Jak vytvořit tabulku založenou na sadě výsledků JDBC

  2. Echo out mysql do html tabulky?

  3. Jak změnit řádek příkazového řádku v SQLite

  4. Proč se mi při volání procedury v C# zobrazuje chyba Oracle?