Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận sự khác biệt về ngày

Điều quan trọng là bạn phải phát triển các truy vấn MySQL và hoàn thiện chúng bên ngoài ngữ cảnh của mã PHP trước, sau đó tích hợp truy vấn khi bạn có nó hoạt động theo cách bạn cần để trong ứng dụng khách MySQL như MySQL Workbench, PHPMyAdmin, v.v.

Trong truy vấn của bạn, SELECT bên ngoài là không cần thiết và bản thân truy vấn bên trong có vẻ gần như đúng, nhưng cách bạn cố gắng thực thi nó với PDO đã bị lỗi.

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

Bây giờ để thực thi nó trong PDO, bạn nên sử dụng prepare()/bindParam()/execute() để tạo một câu lệnh đã chuẩn bị sẵn, liên kết trong các tham số và thực thi nó với các tham số đó (mặc dù vậy bạn không thể ràng buộc tên bảng - tên đó phải vẫn là một biến). Trong mã hiện tại của bạn, bạn có một kết hợp của PDO::query() phương thức được sử dụng cho các truy vấn tĩnh đơn giản và PDOStatement::execute() phương thức được sử dụng để thực hiện một câu lệnh đã chuẩn bị. Bạn nên sử dụng phương thức câu lệnh đã chuẩn bị thay vì 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);

Tôi luôn khuyên bạn nên dành thời gian với hướng dẫn PDO này dành cho nhà phát triển MySQL đặt cách sử dụng của PDO trong ngữ cảnh của mysql_*() cũ API mà bạn có thể đã quen thuộc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng dấu gạch ngang sau mysql_real_escape_string

  2. MySQL dual master

  3. javax.naming.NoInitialContextException với mysql DataSource

  4. Làm cách nào để ngăn chặn việc đưa SQL vào PHP?

  5. Thứ tự cột có ảnh hưởng đến hiệu suất trong Microsoft SQL Server 2012 không?