Всем привет , сделайте за меня . Если без приколов ещё ума не хватает самому писать , что-то с do while крутися в голове да и крутися если можно без do-while давайте )), как сделать так чтобы , если в базе данных уже существует такое число происходила генерация нового числа до тех пор пока не будет найдено свободное , после чего свободное число добавлялось в бд, и только после этого уже происходила переадресация PHP: $i = rand(1,1000); mysqli_query($mysqli, "INSERT IGNORE INTO `".PREFIX."_test` SET `rand` = '".$i."'"); header('Location: m/test.php');
MySQL :: MySQL 8.0 Reference Manual :: 12.15 Information Functions Пример после "Use the table to generate sequence numbers like this:" Код (SQL): UPDATE SEQUENCE SET id=LAST_INSERT_ID(id+1); SELECT LAST_INSERT_ID();
В общем , если запись существует с таким значением в бд нужно чтобы была не ошибка, а генерировалась новое число/строка уникальное рандомное до тех пор пока не найдется свободное, после того как успешно добавлена запись была переадресация на мне нужную страницу . Опыта ещё мало написать сам не могу
Если про это, INSERT ON DUPLICATE KEY UPDATE . Тогда выходит если у тебя число такое как у меня , ты вылетаешь я остаюсь )), и вот из этого начинаются, админ почему меня выкинуло ))) Приходит какой-то Ванька совпадает число, и я тоже вылетаю В условие я тоже поместить могу insert ignore чтобы была ошибка, в голове крутиться через while но как бы опыт не большой в программирование сложные конструкции ещё строить не могу
PHP: $maxIterationsLimit = 1000; $iteration = 0; $stmt = $mysqli -> prepare( 'SELECT `id` FROM `table` WHERE `rand` = ?' ); $stmt -> bind_param( 'i', $rand ); while ( true ) { if ( $iteration >= $maxIterationsLimit ) { throw new \RangeException( 'Превышен максимальный лимит итераций' ); } $rand = mt_rand ( 1, $maxIterationsLimit ); $stmt -> execute(); $stmt -> store_result(); if ( $stmt -> num_rows ) { break; } $iteration++; } $stmt -> close(); ... INSERT $rand
Сделать выборку если существует пересоздать число , после чего вставить в бд и́ сделать переадресацию?
Это хрень. В худшем случае нужно будет все записи обойти. Делай уникальность на основе автоинкремента. Если нужен рандом, объединяй рандомную часть с автоинкрементальной («на лету» или в отдельном поле).