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.