php中的递增函数出错了

问题描述 投票:0回答:1

我准备了一个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);
}
php mysql function max increment
1个回答
1
投票

你的问题是因为你的表中的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

© www.soinside.com 2019 - 2024. All rights reserved.