PHP: class addBuildings { public $loc_id = array(); public $loc_type = array(); public $cityes_id = array(); public function __construct($userData, $mysqli) { $result = $mysqli->query("SELECT * FROM `cityes` WHERE `user_id` = '{$userData->row['id']}'"); while ($cityes = $result->fetch_array(MYSQLI_ASSOC)) { $this->cityes_id[] = $cityes['id']; } } public function getMapTypeAndId($mysqli, $city, $userData) { $result = $mysqli->query("SELECT * FROM `map` WHERE `city` = '$city'"); while($map = $result->fetch_array(MYSQLI_ASSOC)) { $this->loc_id[] = $map['id']; $this->loc_type[] = $map['type']; } for($i = 0; $i<=8; $i++) { if ($this->loc_type[$i] == 0) { $check = $mysqli->query("SELECT * FROM `buildings` WHERE `science` <= '{$userData->row['science']}' AND `loc_type` = '0'"); }elseif($this->loc_type[$i] == 1 or $this->loc_type[$i] == 2 or $this->loc_type[$i] == 4) { $check = $mysqli->query("SELECT * FROM `buildings` WHERE `science` <= '{$userData->row['science']}' AND (`loc_type` = '{$this->loc_type[$i]}' OR `loc_type` = '7' OR `loc_type` = '8')"); }elseif($this->loc_type[$i] == 5) { $check = $mysqli->query("SELECT * FROM `buildings` WHERE `science` <= '{$userData->row['science']}' AND `loc_type` = '5')"); } $this->insert($city, $check, $mysqli, $i); } $this->loc_id = array(); $this->loc_type = array(); } public function insert($city, $check, $mysqli, $i) { while($buildings = $check->fetch_array(MYSQLI_ASSOC)) { $res = $mysqli->query("SELECT * FROM `all_buildings` WHERE `city_id` = '$city' AND `building_id` = '{$buildings['id']}' AND `loc_id` = '{$this->loc_id[$i]}'"); while(!is_null($ab = $res->fetch_array(MYSQLI_ASSOC))) { $insert = $mysqli->query("INSERT INTO `ondottr`.`all_buildings` (`id`, `city_id`, `building_id`, `loc_id`, `type`) VALUES (NULL, '$city', '{$buildings['id']}', '{$this->loc_id[$i]}', '{$buildings['loc_type']}')"); } } } } $addBuildings = new addBuildings($userData, $mysqli); for($num = 0; $num < count($addBuildings->cityes_id); $num++) { $addBuildings->getMapTypeAndId($mysqli, $addBuildings->cityes_id[$num], $userData); } проблема в методе "insert" здесь : while(!is_null($ab... Мне нужно чтобы последующий запрос выполнялся только если в бд нету такой записи : "SELECT * FROM `all_buildings` WHERE `city_id` = '$city' AND `building_id` = '{$buildings['id']}' AND `loc_id` = '{$this->loc_id[$i]}" А получается бесконечный цикл..
вам нужно логику во функции public function insert переделать, так как не правильно проверяется на отсутствие данных в бд --- Добавлено --- https://php.net/manual/ru/mysqli-stmt.num-rows.php --- Добавлено --- если нум ровс возвращает 0 то добавляем --- Добавлено --- во вторых, что - то не догоняю смысл того цикла while, иначе вы дублируете данные в бд.
Просветил, большое спасибо сделал так: PHP: public function insert($city, $check, $mysqli, $i) { while($buildings = $check->fetch_array(MYSQLI_ASSOC)) { $res = $mysqli->query("SELECT * FROM `all_buildings` WHERE `city_id` = '$city' AND `building_id` = '{$buildings['id']}' AND `loc_id` = '{$this->loc_id[$i]}'"); if($res->num_rows == 0) { $insert = $mysqli->query("INSERT INTO `all_buildings` (`id`, `city_id`, `building_id`, `loc_id`, `type`) VALUES (NULL, '$city', '{$buildings['id']}', '{$this->loc_id[$i]}', '{$buildings['loc_type']}')"); } } }