Инкрементная функция в php идет не так - PullRequest
0 голосов
/ 22 марта 2019

Я подготовил функцию php, которая получает значение MAX в строке, а затем добавляет «1» к числу. Так что, когда я регистрирую новый этап, он подготавливает значение MAX для следующего этапа, который будет зарегистрирован. С этой функцией все в порядке, пока значение MAX не достигло числа «10». Когда он достигает «10», значение MAX не изменяется, и независимо от того, добавляю я новый этап или нет, значение остается равным 10. Пожалуйста, помогите мне, что здесь не так.
вот код:

$query = "SELECT MAX(pstage_num) as latest_level FROM pstage 
                               WHERE course = :course";
            $stmt = $conn->prepare($query);
            $course= sanitize($course);
            $stmt->bindParam("course", $course);
            $stmt->execute();
            $outcome = $stmt->fetch(PDO::FETCH_ASSOC);
            return intval($outcome['latest_level'])+1;

и это моя функция sanitize ():

function sanitize($in = null) {
    return filter_var($in, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
}

1 Ответ

1 голос
/ 22 марта 2019

Ваша проблема в том, что pstage_num в вашей таблице определен как тип символа (вероятно, VARCHAR). Когда вы пытаетесь взять MAX из '9' и '10', вы получаете '9' (см. это демо dbfiddle ), потому что в виде строки '9' больше чем «10». Таким образом, даже если вы вставите значения до 89, вы все равно получите «9» в качестве максимального значения. Вам нужно изменить тип столбца на INT, чтобы этот код работал, например,

ALTER TABLE pstage MODIFY COLUMN pstage_num INT

После чего код будет работать (см. это демо )

...