我希望在查询中区分两个日期。我尝试使用多个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();
由于
答案 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);