sql >> Database teknologi >  >> RDS >> Mysql

Få datoforskel

Det er vigtigt at udvikle dine MySQL-forespørgsler og perfektionere dem uden for PHP-kodens kontekst først, og derefter integrere forespørgslen, når du har fået den til at fungere, som du har brug for den i en MySQL-klientapplikation som MySQL Workbench, PHPMyAdmin osv.

I din forespørgsel, den ydre SELECT er ikke nødvendig, og selve den indre forespørgsel ser næsten korrekt ud, men det er den måde, du forsøger at udføre den på med PDO, der er defekt.

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

For nu at udføre det i PDO, bør du bruge prepare()/bindParam()/execute() at oprette en forberedt sætning, binde parametre ind og udføre den med disse parametre (du kan dog ikke binde tabelnavnet - det skal forblive en variabel). I din nuværende kode har du en blanding af PDO::query() metode, der bruges til simple statiske forespørgsler og PDOStatement::execute() metode, som bruges til at udføre en udarbejdet erklæring. Du bør bruge den forberedte sætningsmetode i stedet for 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);

Jeg anbefaler altid at bruge tid med denne PDO-vejledning til MySQL-udviklere som placerer PDO's brug i sammenhæng med den gamle mysql_*() API, du måske allerede er bekendt med.



  1. Hvordan kortlægger jeg en indfødt forespørgsel til en POJO, når jeg ikke har nogen enhed på mit projekt?

  2. Beregn den nøjagtige månedsforskel mellem to datoer

  3. SQL Server-version af Oracles ADD_MONTHS()

  4. ActiveRecord Fuzzy Search