php 中的递增函数出错

An incrementing function in php going wrong

我准备了一个php函数,它获取一行中的最大值,然后将数字加“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);
}

你的问题是因为你的table中的pstage_num被定义为字符类型(可能是VARCHAR)。当您尝试获取 '9' 和 '10' 的 MAX 时,您会得到 '9'(请参阅 this dbfiddle demo),因为 作为字符串 '9'大于“10”。因此,即使您将值一直插入到 89,您仍然会得到“9”作为最大值。您需要将列的类型更改为 INT 才能使此代码正常工作,例如

ALTER TABLE pstage MODIFY COLUMN pstage_num INT

之后代码将起作用(参见 this demo