Там, где я работаю, нам нужно зарегистрировать компьютеры в базе данных, прежде чем мы просто использовали ручку, но меня попросили создать более простой метод. Поэтому я сделал небольшую домашнюю страницу.
Компьютеры зарегистрированы по метке и номеру. Тег в сочетании с номером должен быть уникальным, я сделал этот цикл, который увеличивает введенный номер до тех пор, пока не найдет свободный.
$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 двухстрочный первичный ключ с автоинкрементом
Других решений пока нет …