gpt4 book ai didi

php - MySQL 查询将日期字符串解释为日期

转载 作者:行者123 更新时间:2023-11-29 08:26:11 24 4
gpt4 key购买 nike

我看到了一些关于这个问题的帖子,但我没有让它正常工作。我有一个 PHP 变量,最初将其作为字符串 POST 。为了能够处理一周的日期范围,我使用 strToTime 将其转换为日期时间格式(例如,2013 年 7 月 22 日回显为 1374476400)。

我的表以 Y-m-d 格式将日期存储为文本(例如,2013 年 7 月 22 日存储为 2013-07-22)。我需要运行一个查询来比较这两个值,以查找属于我的一周范围内的日期,因此我尝试将该文本转换为日期时间格式以进行比较。

这是我正在使用的 SQL:

$wk_begin = $_POST['wk_begin'];
$wk_begin = strToTime($wk_begin);
$wk_end = $wk_begin + 8;
$sql = "SELECT * FROM myTable WHERE (DATE(date)>=$wk_begin AND DATE(date)<$wk_end)";

我没有收到任何错误,但我的查询没有选取任何记录,即使我知道表中有 7 个匹配的记录。所以我有两个问题:

1)有更好的方法来解决这个问题吗?2)如果我走对了路,我怎样才能得到sql语句将基于文本的日期转换为大整数,以便我可以正确地进行比较。

感谢任何帮助。谢谢!

编辑:感谢您的所有建议。我更改了表格,以便日期以“日期”格式存储(不再有字符串)。这是更新后的代码。仍然没有获取任何值:

$wk_begin = $_POST['wk_date'];
$wk_end = $wk_begin + 7;
$sql = "SELECT * FROM Workouts WHERE 'date' BETWEEN '$wk_begin' AND '$wk_end'";

最佳答案

date是mysql中的保留字,将其用作字段名称,用反引号括起来。

此外,您的变量插入需要用撇号括起来

SELECT * FROM myTable WHERE (DATE(`date`)>='$wk_begin' AND DATE(`date`)<'$wk_end'

更好的解决方案(除了将日期字段设为日期字段之外)是在构建 sql 语句时使用 db 库的转义和引用机制。

此外,由于您以 Y-m-d 格式存储日期,因此无需转换为日期,因为以这种方式格式化的日期的字符串比较的计算结果与字符串相同。所以

$sql = "SELECT * from myTable WHERE `date` >= ".$db->quoteAndEscape($wk_begin)." and `date` < ".$db->quoteAndEscape($wk_end);

更新

基于this日期可以用作不带引号的字段名称。

关于php - MySQL 查询将日期字符串解释为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com