Есть такой код:
function getUser($full_name, $social_id) {
global $mysqli;
connectDB();
$result = $mysqli->query("SELECT * FROM `users` WHERE `full_name` = '$full_name' AND `social_id` = '$social_id'");
if (mysqli_num_rows($result) == 0) {
if (setUser($full_name, $social_id)) {
getUser($full_name, $social_id);
}
}
closeDB();
return $result->fetch_assoc();
}
function setUser($full_name, $social_id) {
global $mysqli;
connectDB();
$mysqli->query("INSERT INTO `users` SET `full_name` = '$full_name', `social_id` = '$social_id'");
$id = mysqli_insert_id($mysqli);
closeDB();
return $id;
}
Суть в следящем: Вызываться функция getUser, если такой user уже есть, то вернуть о нем информацию. Если нету, то задать его, и вернуть информацию визовом функции getUser. Почему-то идет зацикливание. В базе каждую секунду добавляться одинаковый user
Попробуйте возвращать значение getUser, завершая тем самым выполнение функции
if (setUser($full_name, $social_id)) {
return(getUser($full_name, $social_id));
}
У меня правда и без этого заработало, но я не знаю, как у вас реализованы connectDB и closeDB. При рекурсивном вызове closeDB не срабатывает, а после вызова срабатывает, когда соединение уже и так закрыто.
Попробуйте
$id = $mysqli->insert_id;
вместо
$id = mysqli_insert_id($mysqli);
Замените
if (mysqli_num_rows($result) == 0) {
if (setUser($full_name, $social_id)) {
getUser($full_name, $social_id);
}
}
на
if($result->num_rows == 0){ // проверяем количество записей в результате
if (setUser($full_name, $social_id)) {
return getUser($full_name, $social_id); // Прерываем дальнейшее выполнение
}
}
Функции правильные, проблема в максимальном значении типа int в БД. Заменил на bigint. Все работает
Продвижение своими сайтами как стратегия роста и независимости