选择do while循环中的计数中断


Select count breaks in do-while loop

在我工作的地方,我们需要将计算机注册到数据库中,然后再使用笔和纸,但我被要求创建一个更简单的方法。所以我做了一个小的本地主页。

这些计算机是通过标签和编号注册的。与数字组合的标签必须是唯一的,我做了这个循环,递增输入的数字,直到它找到一个空闲的数字。

                $checkUnique = openConnection("stationer")->prepare("SELECT COUNT(1) FROM `dator` WHERE `tag_id`=:id AND `tag_number`=:number");
                do{
                    $checkUnique -> bindParam(":number", $_POST['number']);
                    $checkUnique -> bindParam(":id", $_POST['tag']);
                    $checkUnique -> execute();
                    $checkUniqueResult = $checkUnique->fetchColumn();
                    if($checkUniqueResult != 0 && empty($searchTagNumber)){
                        $errors[] = "Non-unique tag and number"; break;
                    }
                    $_POST['number'] = $searchTagNumber == "+" ? $_POST['number']+1 : $_POST['number']-1;
                    if($_POST['number'] <= 0){
                        $errors[] = "The tag number can't be 0 or lower"; break;
                    } 
                }while($checkUniqueResult > 0); 

但由于一些奇怪的原因,它似乎随机停止了,即使标签和数字不是唯一的,没有错误消息,我也不知道是什么原因导致的

您可以使用这样的唯一密钥:

UNIQUE KEY `computer_key` (`tag`,`number`)

或者更改引擎MyISAM:mysql两列主键和自动递增