为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
四季花海 2023-04-21 15:46:22
所以我有一个包含月份的数据库表,月份和年份的数值。例如。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因为它实际上是将第一个51第一个进行比较。

为列分配正确的数据类型很重要 - 如果您希望将某些内容视为数字并能够对其进行数学运算,则必须将其声明为数字字段。

查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信