对 mysql 数据库的 Php 查询未给出所需的结果

所以我有一个包含月份的数据库表,月份和年份的数值。例如。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     years

1            January      1        2020

2            Febuary      2        2020

3            March        3        2020

4            April        4        2020

5            May          5        2020

6            June         6        2020

7            July         7        2020

8            August       8        2020

9            September    9        2020

10           October      10       2020

11           November     11       2020

12           December     12       2020

13           January      1        2021

....


四季花海
浏览 87回答 1
1回答

弑天下

看起来您已将value数据库中的列定义为而varchar不是int. 它必须是int,否则 MySQL 将在您的查询中为测试进行字符串比较>=而不是数字比较。字符串比较对两个值进行逐个字符的比较,例如,结果5被视为大于,10因为它实际上是将第一个5与1第一个进行比较。为列分配正确的数据类型很重要 - 如果您希望将某些内容视为数字并能够对其进行数学运算,则必须将其声明为数字字段。
打开App,查看更多内容
随时随地看视频慕课网APP