Loading...
Лара (6 сен 2023, в 12:28)
просто insert into, он не пройдет, потому что, такой ид в бд есть, если ты пометишь колонку в бд primary key
do {// сгенерировал id}while(проверил) insert отправил
Вопрос стоит в том как while выполнить чтобы без ошибок ?
________
посл. ред. 06.09.2023 в 12:31; всего 1 раз(а); by SNEG
SNEG , если колонка primary key / unique, тебе sql кинет ошибку, обработать ошибку в php можно так https://www.php.net/manual/ru/language.exceptions.php
Лара (6 сен 2023, в 12:34)
SNEG , если колонка primary key / unique, тебе sql кинет ошибку, обработать ошибку в php можно так https://www.php.net/manual/ru/language.exceptions.php
Мне не ошибку нужно обработать а 100% получить новый id
________
посл. ред. 06.09.2023 в 12:37; всего 1 раз(а); by SNEG
SNEG , или так, но это такой себе вариант
php
$connection = mysqli_connect($host, $user, $password, $db_name);

if(!$connection){ // проверка правильности подключения
echo 'Ошибка соединения: ' . mysqli_connect_error() . '<br>';
echo 'Код ошибки: ' . mysqli_connect_errno();
}else{ // подключение успешно установлено

// текст SQL запроса, который будет передан базе
$query = 'SELECT * FROM `USERS`';

// выполняем запрос к базе данных
$result = mysqli_query($connection, $query);

if(!$result){ // запрос завершился ошибкой
echo 'Ошибка запроса: ' . mysqli_error($connection) . '<br>';
echo 'Код ошибки: ' . mysqli_errno($connection);
}else{ // запрос успешно выполнился
while($row = $result->fetch_assoc()){
// обрабатываем полученные данные
}
}
// закрываем соединение с базой
mysqli_close($connection);
}
SNEG (6 сен 2023, в 12:35)
Мне не ошибку нужно обработать а 100% получить новый id
получил ошибку от sql, обработал ее и сгенерировал новый ид
А что мешает добавлять к такой записи временную метку и быть точно уверенным в ид ?🤔
А лучше всего если не планируются миллионы записей забить на это и попросить повторить попытку сгенерировав новый ид
Scammer (6 сен 2023, в 12:41)
А что мешает добавлять к такой записи временную метку и быть точно уверенным в ид ?🤔
А лучше всего если не планируются миллионы записей забить на это и попросить повторить попытку сгенерировав новый ид
Мешает , могбы проще каждому id присвоить ai и уникальный ключ а так нужно сгенерировать id самому без всяких а что мешает а давайте добавим, и проверить или такой id существует, если существует перегенировать не останавливая работу скрипта и вставить новый свободный в бд
________
посл. ред. 06.09.2023 в 12:53; всего 1 раз(а); by SNEG
Вопрос всё ещё актуален , только без а может а давайте добавим а что мешает
________
посл. ред. 06.09.2023 в 13:05; всего 1 раз(а); by SNEG
Делаешь "LOCK TABLES users WRITE"
С помощью do-while генеришь id и проверяешь существование его наличие в базе, если есть - генеришь заново, ну ты в курсе как это делается
Делаешь "INSERT..."
Делаешь "UNLOCK TABLES"
________
посл. ред. 06.09.2023 в 13:32; всего 1 раз(а); by Something
SNEG (6 сен 2023, в 12:52)
Мешает , могбы проще каждому id присвоить ai и уникальный ключ а так нужно сгенерировать id самому без всяких а что мешает а давайте добавим, и проверить или такой id существует, если существует перегенировать не останавливая работу скрипта и вставить новый свободный в бд
Причём тут AI?если в эту айдишку вшить метку времени то шанс того что твой хеш + метка времени совпадает близится к нулю. А так твоё решение с циклом плюс это внутри транзакции сделать дабы избежать колизии
Онлайн: 4
Время:
Gen. 0.1154
(c) Bym.Guru 2010-2025