获取日期差异

时间:2015-01-22 11:33:01

标签: 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();

由于

3 个答案:

答案 0 :(得分:2)

重要的是开发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()创建一个预准备语句,绑定参数,然后用这些参数执行它(你不能绑定表名 - 必须保持变量) 。在当前的代码中,您可以看到用于简单静态查询的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的上下文中。

答案 1 :(得分:0)

试试这个,

SELECT * , (select (DATEDIFF(due_date,date_paid)) AS date_interval) FROM $tbl_name

答案 2 :(得分:-1)

使用它来查找日期差异

      $diff=date_diff($date1,$date2);