<?php
function load_users_data($user_ids) {
	//Подключаться к базе на каждой итерации цикла - очень ресурсоемко. Следует подключить базу, как минимум вне цикла, ещё лучше в отдельном классе или конфигурационном файле. 
	//Для простоты вынесем подключение вне цикла
	$db = mysqli_connect("localhost", "root", "123123", "database");
	//Проверяем подключение к базе
	if (mysqli_connect_error () ) {
		die("Не удалось подключиться: ".mysqli_connect_error());
	}
	
	$user_ids = explode(',', $user_ids);
	//Делать несколько запросов к базе также ресурсоемко, можно составить один запрос, где выбирались бы данные всех полученных пользователей.
	//Так же лучше запрашивать только ту информацию, которая будет использоваться дальше, вместо всей имеющейся в базе.
	$query = "SELECT id, name FROM users WHERE id IN (";
	foreach ($user_ids as $key => $user_id) {
		//Принимаемые переменные не проверятся, возможна sql-инъекция, тем более с GET-запросом. Принимаемые значения должны быть целыми положительными числами, необходимо проверить с помощью регулярного выражения.
		if (preg_match ('/^\+?\d+$/', $user_id) ) {
			if ($key !== 0) {
				$query .= ", ";
			}
			$query .= $user_id;
		}
	}
	$query .= ")";
	//Запрос составлен, запрашиваем данные
	$sql = mysqli_query($db, $query);
	//Нет проверки на успех запроса
	if ($sql === flase) {
		$data['error'] = 'Неудача';
	} else{
		//Разбираем полученный запрос
		while ($obj = $sql->fetch_object () ) {
			$data[$obj->id] = $obj->name;
		}
	}
	//Освобождаем память под запрос
	mysqli_free_result($obj);
	//Закрываем соединение с базой
	mysqli_close($db);
	//Возвращаем полученный массив данных или ошибку
	return $data;
}
$data = load_users_data ($_GET['user_ids']);
if ($data['error']) {
	echo $data['error'];
}else{
	foreach ($data as $user_id => $name) {
		echo "<a href=\"/show_user.php?id=$user_id\">$name</a>";
}
