Я создаю URL и не хочу дубликата, поэтому я ищу в БД для URL, если он существует, я добавляю -number в конец, но затем мне нужно снова искать в БД, чтобы увидеть, если этот вновь созданный URL-адрес с тире-номером также существует, если он увеличивает его на единицу, пока не будет результатов, и тогда я сохраню уникальный URL-адрес.
Я подумал использовать рекурсивную функцию для этого, но она не работает, и я не могу понять, почему. У меня есть другая функция, которую я вызываю для увеличения -number, если URL-адрес найден, который работает нормально, поэтому здесь не включен. Вот код, который у меня есть ...
function checkDuplicateCategoryURL($catURL, $userID, $db){
$queryCatURLDuplicate = $db->prepare('SELECT id, url FROM lessonCats WHERE userID = :userID AND url LIKE :catURL ORDER BY id DESC LIMIT 1');
$queryCatURLDuplicate->execute(array(':userID' => $userID, ':catURL' => $catURL));
$listRow = $queryCatURLDuplicate->fetch();
if (!$listRow) {
return $catURL;
} else {
$categ = increment_string($listRow['url']);
$queryCatURLDuplicate = null;
checkDuplicateCategoryURL($categ, $userID, $db);
}
}
$categoryURL = checkDuplicateCategoryURL($categoryURL, $userID, $db);
ОБНОВЛЕНИЕ: Я просто подумал сделать это с помощью цикла while, и он, кажется, работает, но я все еще хотел бы знать, является ли это лучшим способом сделать это. Повторные вызовы в БД кажутся плохой вещью, но я не могу придумать другого способа сделать это.
$listRow = true;
while($listRow){
$queryCatURLDuplicate = $db->prepare('SELECT id, url FROM lessonCats WHERE userID = :userID AND url LIKE :catURL ORDER BY id DESC LIMIT 1');
$queryCatURLDuplicate->execute(array(':userID' => $userID, ':catURL' => $categoryURL));
$listRow = $queryCatURLDuplicate->fetch();
if($listRow){
$categoryURL = increment_string($listRow['url']);
}
}