获取日期差异
Get Date Difference
我想获得查询中两个日期之间的差异。我尝试使用多个 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();
谢谢
用它来查找日期差异,
$diff=date_diff($date1,$date2);
重要的是首先开发 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()
创建准备好的语句,绑定参数,然后使用这些参数执行它(您不能绑定 table 名称 -那必须保持一个变量)。在您当前的代码中,您混合了用于简单静态查询的 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 的上下文中。
试试这个,
SELECT * , (select (DATEDIFF(due_date,date_paid)) AS date_interval) FROM $tbl_name
我想获得查询中两个日期之间的差异。我尝试使用多个 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();
谢谢
用它来查找日期差异,
$diff=date_diff($date1,$date2);
重要的是首先开发 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()
创建准备好的语句,绑定参数,然后使用这些参数执行它(您不能绑定 table 名称 -那必须保持一个变量)。在您当前的代码中,您混合了用于简单静态查询的 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 的上下文中。
试试这个,
SELECT * , (select (DATEDIFF(due_date,date_paid)) AS date_interval) FROM $tbl_name