Penting untuk mengembangkan kueri MySQL Anda dan menyempurnakannya di luar konteks kode PHP terlebih dahulu, kemudian mengintegrasikan kueri setelah Anda membuatnya berfungsi seperti yang Anda butuhkan dalam aplikasi klien MySQL seperti MySQL Workbench, PHPMyAdmin, dll.
Dalam kueri Anda, bagian luar SELECT
tidak diperlukan, dan kueri dalam itu sendiri terlihat hampir benar, tetapi cara Anda mencoba mengeksekusinya dengan PDO yang salah.
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
Sekarang untuk menjalankannya di PDO, Anda harus menggunakan prepare()/bindParam()/execute()
untuk membuat pernyataan yang disiapkan, mengikat parameter, dan menjalankannya dengan parameter tersebut (meskipun Anda tidak dapat mengikat nama tabel - itu harus tetap menjadi variabel). Dalam kode Anda saat ini, Anda memiliki campuran PDO::query()
metode yang digunakan untuk kueri statis sederhana dan PDOStatement::execute()
metode yang digunakan untuk mengeksekusi pernyataan yang disiapkan. Anda harus menggunakan metode pernyataan yang disiapkan, bukan 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);
Saya selalu merekomendasikan menghabiskan waktu dengan tutorial PDO ini untuk pengembang MySQL
yang menempatkan penggunaan PDO dalam konteks mysql_*()
yang lama API yang mungkin sudah Anda kenal.