Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan Perbedaan Tanggal

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA INFILE hanya 1 record yang dimasukkan

  2. Kesalahan muncul dalam kode mysqli dan call_user_func_array()

  3. Apa cara terbaik dan termudah untuk Mengisi dropdown berdasarkan dropdown lain

  4. Persistensi koneksi PHP MySQL

  5. MySQL Query Tuning - Mengapa menggunakan nilai dari variabel jauh lebih lambat daripada menggunakan literal?