Запрос PDO с рекурсией - PullRequest
       3

Запрос PDO с рекурсией

0 голосов
/ 03 ноября 2018

Я создаю 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']);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...