gpt4 book ai didi

php - 从 View 中提取两个日期之间的记录

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:27 26 4
gpt4 key购买 nike

我有一个 mysql 日期时间字段,它以 '2013-12-25 00:00:00' 的形式存储日期我需要使用如下查询选择表中任何月份的所有记录:

$sql = "SELECT * 
FROM `images`
WHERE (photodate BETWEEN '2003-11-01 00:00:00' AND '2003-12-03 00:00:00')
ORDER BY photodate DESC
LIMIT 30";

上面的选择查询很好地完成了工作。

为了更改日期,我需要用变量替换 '2003-11-01 00:00:00'AND'2003-12-03 00:00:00',所以我用 $startyear$startmonth 的两个下拉列表中的输入数据设置了一个变量,并将其转换为我认为正确的形式,使用:

$startdate = $startyear."-".$startmonth."-01 00:00:00";

我通过将 1 添加到 $startmonth 来对 $enddate 执行相同的操作。

然后我的代码变成:

$sql = "SELECT *
FROM `images`
WHERE (photodate BETWEEN $startdate AND $enddate)
ORDER BY photodate DESC
LIMIT 30";

这根本不起作用,并给出一个 MySQL 错误。经过一个月的努力,在任何使用变量而不是文本的论坛上都找不到任何东西,我完全不知道如何做到这一点。感谢所有帮助。

最佳答案

您很容易受到 SQL injection attacks 的攻击,这就是它不起作用的原因。您正在生成文字查询

... WHERE (photodate BETWEEN 2003-11-01 00:00:00 AND 2013-12-03 00:00:00)

2003-11-012013-12-03 将被解释为一系列数学减法,而 00:00:00 将是一个简单的语法错误。您至少需要引用这些值:

... WHERE (photodate BETWEEN '$startdate' AND '$enddate')
^----------^-----^--------^--- note the quotes

这样 mysql 就可以将整个日期视为日期值,而不是一些任意损坏的字符串。

关于php - 从 View 中提取两个日期之间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666950/

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