【问题标题】:An incrementing function in php going wrongphp中的递增函数出错
【发布时间】:2019-08-13 08:35:30
【问题描述】:

我准备了一个 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 的表定义吗?更具体地说,pstage_num 列的定义。
  • 我无法理解为什么您不能在表定义中将 pstage_num 标记为自动增量...
  • 您尝试过什么调试问题?这看起来确实很奇怪。为什么你要通过自己的代码准备好的语句来清理你的数据?
  • 这是一个新手的怪人,兄弟。

标签: php mysql function max increment


【解决方案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

【讨论】:

  • 特别感谢!!!数以百万计的感谢。学到了一些新东西。祝你一切顺利。
  • @H.M.,如果这确实解决了您的问题,请考虑将答案标记为已接受(上/下投票箭头下的复选标记)。见stackoverflow.com/help/someone-answers
  • 亲爱的尼克,由于我的声誉不到 15 岁,我无权投票,你知道的。如果我有更多的名声,我会在没有你要求的情况下投票给你。无论如何,我想再次感谢你。
  • @H.M.我确实知道您不能投票,但您可以通过标记已接受的答案来关闭一个问题,即检查上/下投票按钮下的标记。例如,请参阅this question 的答案,即使发帖人的声誉低于您,该答案也会被标记为接受。
  • 完成。亲爱的尼克,我做到了。
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 2015-01-10
  • 2020-08-18
  • 2017-06-24
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多