所以我有一個包含月份的數據庫表,月份和年份的數值。例如。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 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消