所以我有一个包含月份的数据库表,月份和年份的数值。例如。2020 年 6 月 6 日。我有一个选择下拉列表,它根据表中的数据动态填充。这个想法是,如果当前月份是 6 月,则选择下拉列表应该只填充 6 月到 12 月。我遇到的问题是,我不明白的是,在我运行查询时的页面上,下拉列表只填充了五月到九月。而如果我直接在数据库中的表上运行相同的查询,我会得到想要的结果。下面的查询: $yvalue = $_POST['years']; //assume this to be "2020"; $curyear = date('Y'); $curmonth = date('n'); // Lets also assume this to be "5"; if ($yvalue==$curyear) { $query = "SELECT calmonthsID, months, value, years from calmonths WHERE years=? AND value>=? ORDER BY calmonthsID ASC"; $stmt = $connQlife->prepare($query); $stmt->bind_param('ss', $yvalue, $curmonth); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($calmonthsID, $months, $value, $years); }else{ $query = "SELECT calmonthsID, months, value, years from calmonths WHERE years=? ORDER BY calmonthsID ASC"; $stmt = $connQlife->prepare($query); $stmt->bind_param('s', $yvalue); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($calmonthsID, $months, $value, $years); } echo "<option>- Select Month -</option>"; while($stmt->fetch()) { echo '<option value='.$value.'>'.$months.'</option>'; } $stmt->close();当上面的查询在页面上运行时,下拉列表中会填充月份 May 到 September。省略 10 月至 12 月。当我假设$curmonth = date('n');是时,10我得到了 2 月到 12 月的下拉列表。省略一月。再次当我假设$curmonth = date('n');是时11,我得到了从二月到十二月的下拉列表。省略一月和十月。当我假设时12,一月、十月和十一月不见了。但是直接在数据库中运行所有这些查询给出了预期的结果。所以我对在 Php 中运行查询时出了什么问题或发生了什么感到困惑。这是数据库数据:calmonthsID months value years1 January 1 20202 Febuary 2 20203 March 3 20204 April 4 20205 May 5 20206 June 6 20207 July 7 20208 August 8 20209 September 9 202010 October 10 202011 November 11 202012 December 12 202013 January 1 2021....
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
看起来您已将value
数据库中的列定义为而varchar
不是int
. 它必须是int
,否则 MySQL 将在您的查询中为测试进行字符串比较>=
而不是数字比较。
字符串比较对两个值进行逐个字符的比较,例如,结果5
被视为大于,10
因为它实际上是将第一个5
与1
第一个进行比较。
为列分配正确的数据类型很重要 - 如果您希望将某些内容视为数字并能够对其进行数学运算,则必须将其声明为数字字段。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消