sql >> Database >  >> RDS >> Mysql

Datumverschil ophalen

Het is belangrijk om uw MySQL-query's te ontwikkelen en ze eerst te perfectioneren buiten de context van PHP-code, en vervolgens de query te integreren zodra u deze hebt laten werken zoals u hem nodig hebt in een MySQL-clienttoepassing zoals MySQL Workbench, PHPMyAdmin, enz.

In uw zoekopdracht, de buitenste SELECT is niet nodig, en de innerlijke query zelf ziet er bijna correct uit, maar het is de manier waarop je het probeert uit te voeren met PDO die defect is.

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

Om het nu in PDO uit te voeren, zou je prepare()/bindParam()/execute() om een ​​voorbereide instructie te maken, parameters in te binden en deze met die parameters uit te voeren (u kunt de tabelnaam echter niet binden - dat moet een variabele blijven). In je huidige code heb je een verwisseling van de PDO::query() methode die wordt gebruikt voor eenvoudige statische zoekopdrachten en de PDOStatement::execute() methode die wordt gebruikt om een ​​voorbereide instructie uit te voeren. U moet de voorbereide instructiemethode gebruiken in plaats van 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);

Ik raad altijd aan om tijd door te brengen met deze PDO-zelfstudie voor MySQL-ontwikkelaars die het gebruik van PDO plaatst in de context van de oude mysql_*() API waarmee u misschien al bekend bent.



  1. Hoe moet ik database-invoer in Java opschonen?

  2. Draaitabel maken voor aanwezigheid met php en mysql

  3. juiste manier om een ​​draaitabel in postgresql te maken met CASE WHEN

  4. Utf-8-tekens weergegeven als ISO-8859-1