php - 获取日期差异

标签 php mysql pdo

我想在查询中获取两个日期之间的差异。我尝试使用多个 select 语句,但它不起作用

这是我的代码

$tbl_name = "myTable";
$setDay = "10";

$stmt = $pdo->query("SELECT * (
              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");
$stmt->execute();

谢谢

最佳答案

重要的是先开发 MySQL 查询并在 PHP 代码的上下文之外完善它们,然后在查询以您需要的方式工作后将其集成到 MySQL 客户端应用程序中,例如MySQL Workbench、PHPMyAdmin 等

在您的查询中,不需要外部 SELECT,内部查询本身看起来几乎是正确的,但是您尝试使用 PDO 执行它的方式是错误的。

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

现在要在 PDO 中执行它,您应该使用 prepare()/bindParam()/execute()创建一个准备好的语句,绑定(bind)参数,并使用这些参数执行它(你不能绑定(bind)表名 - 它必须保留为变量)。在您当前的代码中,您混合使用了用于简单静态查询的 PDO::query() 方法和使用的 PDOStatement::execute() 方法执行准备好的语句。您应该使用准备好的语句方法,而不是 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);

我总是建议花时间看 this PDO tutorial for MySQL developers它将 PDO 的用法置于您可能已经熟悉的旧 mysql_*() API 的上下文中。

关于php - 获取日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087748/

相关文章:

mysql - Clojure HoneySQL - 如何将连接后的字符串值聚合到单行中?

php - PDO 连接数据库时出错

php - 如何使用 PHP 和 Wamp Server 使用和访问 SQLite 数据库?

php - 在 php 中定义你自己的魔法常量?

php - PHP 样式有问题

php - 将 "INSERT"MySQL 查询转换为 Postgresql 查询

php - 错误 : "SQLSTATE[28000] [1045] Access denied for user" on cPanel SQL database

php - mysql子查询计数位置和分组依据

php - 更新 MySql、PHP 时将值从一个表插入到另一个表

mysql - 如何让我的产品搜索更有效率?