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)
我准备了一个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)