我已经设法在查询中休息一天,但我希望它只能回到工作日
编辑:o)
这是我的查询
$query = $db->prepare("INSERT INTO users(email, name, dob, reminder reminder1, reminder2, reminder3) VALUES (:email, :name, :dob IF (WEEKDAY(:reminder) > 4, DATE_SUB(:reminder1, INTERVAL (WEEKDAY(:reminder2) - 4) DAY),:reminder3))");
$query->bindParam("email", $email, PDO::PARAM_STR);
$query->bindParam("name", $name, PDO::PARAM_STR);
$query->bindParam("dob", $dob, PDO::PARAM_STR);
$query->bindParam("reminder", $dob, PDO::PARAM_STR);
$query->bindParam("reminder1", $dob, PDO::PARAM_STR);
$query->bindParam("reminder2", $dob, PDO::PARAM_STR);
$query->bindParam("reminder3", $dob, PDO::PARAM_STR);
$query->execute();
return $db->lastInsertId();
} catch (PDOException $e) {
exit($e->getMessage());
}
表格给我确定数据已被添加,但没有任何内容被添加到数据库没有错误
提前致谢
答案 0 :(得分:0)
我对一个非常基本的解决方案的建议是使用WEEKDAY()
函数与MySQL IF()
函数一起使用。
前者将为您提供发生当周的给定日期的索引(0表示星期一)。后者提供了您可能在其他编程语言中看到的三元运算符的熟悉服务。
$query = $db->prepare('
INSERT INTO users
VALUES (
:email, :name, :dob,
IF (
WEEKDAY(:reminder0) > 4,
DATE_SUB(:reminder1, INTERVAL (WEEKDAY(:reminder2) - 4) DAY),
:reminder3
)
)
');
您必须使用唯一的命名占位符(请参阅prepare()
的文档)。只需将同一日期绑定到:reminder0
... :reminder3
即可。示例执行如下:
$query->execute([
':email' => 'example@example.org',
':name' => 'Example',
':dob' => '1970-01-01',
':reminder0' => '2018-12-12',
':reminder1' => '2018-12-12',
':reminder2' => '2018-12-12',
':reminder3' => '2018-12-12'
]);
在这一点上,似乎更容易在包含原始预准备语句的函数中使用一些PHP代码执行:reminder
的日期计算。这是你的电话。
您还应该记住,这不会考虑假期。您的用例将决定该事实是否重要。