我准备了一个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);
}
你的问题是因为你的表中的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)