Php запрос к mysql базе данных не дает желаемых результатов - PullRequest
0 голосов
/ 29 мая 2020

Итак, у меня есть таблица базы данных с месяцами, числовыми значениями месяцев и лет. например. 6 июня 2020 г. .

У меня есть раскрывающийся список выбора, который динамически заполняется на основе данных из таблицы.

Идея в том, что если текущий месяц июнь, раскрывающееся меню выбора должно быть заполнено только месяцами с июня по декабрь.

Проблема, с которой я столкнулся, которую я не понимаю, заключается в том, что на странице, когда я запускаю запрос, раскрывающийся список только заселяется с мая по сентябрь. Если я запустил тот же запрос непосредственно в таблице в базе данных, я получу желаемые результаты.

Запрос ниже:

    $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();

Когда указанный выше запрос выполняется на странице, раскрывающийся список заполнен месяцами с мая по сентябрь. Пропуск с октября по декабрь.

Когда я принял $curmonth = date('n'); за 10, я получил выпадающее меню с месяцами с февраля по декабрь. Опуская январь.

Снова Когда я предположил, что $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
....

1 Ответ

2 голосов
/ 29 мая 2020

Похоже, вы определили столбец value в своей базе данных как varchar вместо int. Это должно быть int, иначе MySQL выполнит сравнение строк для теста >= в вашем запросе вместо сравнения numeri c.

Сравнение строк выполняется посимвольно. символьное сравнение двух значений, в результате чего, например, 5 рассматривается как большее, чем 10, потому что оно фактически сравнивает 5 с 1 первым.

Важно, чтобы вы назначьте правильный тип данных для ваших столбцов - если вы хотите, чтобы что-то рассматривалось как число и вы могли вычислять его, тогда вы должны объявить его как поле numeri c.

Вы можете видеть разница в результатах с двумя разными типами данных здесь: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=def28599d8180932de25342ea6647782

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...