【问题标题】:I want to use a for loop to avoid duplicate IDs, but I can not get out of the loop我想使用 for 循环来避免重复的 ID,但我无法摆脱循环
【发布时间】:2019-04-02 09:04:24
【问题描述】:

为了避免重复ID,我写了下面的代码,但是我无法跳出for循环。

print $someid;

一直显示 0。

<?php
        for (; ; ) {
            $sql = "SELECT COUNT * FROM user WHERE id = :id";
            $id =  sha1(uniqid(mt_rand(), true));
            $idcheck = $connect -> prepare($sql);
            $idcheck->bindParam(':id', $id, PDO::PARAM_STR);
            $idcheck -> execute();
            $someid = $idcheck -> rowCount();
            print $someid;
            if ($someid = 0) {
                break;
            } 
        }
?>

只有在没有重复的情况下,我怎样才能跳出循环?

【问题讨论】:

  • $someid = 0 是一个赋值,而不是一个比较……
  • while(true) 更常见于无限循环
  • @YourCommonSense for(;;) 是否存在性能问题?

标签: php for-loop


【解决方案1】:

问题出在 if 条件下,你没有将值与 0 进行比较,而是分配给它,这样做,

<?php
        for (; ; ) {
            $sql = "SELECT COUNT * FROM user WHERE id = :id";
            $id =  sha1(uniqid(mt_rand(), true));
            $idcheck = $connect -> prepare($sql);
            $idcheck->bindParam(':id', $id, PDO::PARAM_STR);
            $idcheck -> execute();
            $someid = $idcheck -> rowCount();
            print $someid;
            if ($someid == 0) {
                break;
            } 
        }
?>

【讨论】:

  • 哦,我粗心了。谢谢。
【解决方案2】:

如果您将 0 分配给 $someid.,则分配返回的值是分配(在这种情况下为 0,即被评估为 false)。

改用== 比较两个值。

【讨论】:

    【解决方案3】:

    你的代码

    if ($someid = 0)
    

    应该是

    if ($someid == 0)
    

    如果条件检查相等需要两个等号而不是一个

    【讨论】:

      【解决方案4】:

      您将始终收到行大小为 1,因为即使没有重复,该列也会显示值 0。

      您需要从列中获取实际值,然后您必须进行比较。此外,您分配的是 0 而不是将其与零进行比较。

      【讨论】:

        猜你喜欢
        • 2014-03-28
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 2013-06-20
        • 1970-01-01
        相关资源
        最近更新 更多