Почему не выполняется запрос mysqli?
Проблема в пихании в код разных умных слов без понимания их смысла. 
Если убрать из кода слово MYSQLI_USE_RESULT, то волшебным образом ошибка исчезнет. Впрочем, я должен признать, что сермяжная правда в двух других ответах есть. Если последовать моему же совету, и использовать prepare/execute  вместо query  (поскольку эта парочка используе USE_RESULT без вариантов), то как раз и придется  либо выбирать все данные, которые вернул запрос, либо освобождать ресурс через free(), либо перед выборкой дергать store_result(). 
Но - повторюсь - в текущем коде этот параметр не имеет смысла и в то же время является причиной всех бед.Но проблемы этого кода на этом только начнутся.
Во-первых, НИКОГДА больше пиши так: die(mysqli_error($mysqli)); а то станешь козленочком и тебя заберут в армию.
Вместо die надо писать trigger_error()
Во-вторых, НИКОГДА не подставляй переменные напрямую в  строку запроса. Передавать данные надо только через плейсхолдеры. Если родной механизм слешком сложный, то можешь воспользоваться библиотекой phpfaq.ru/safemysql и код получится таким.$exists = $db->getOne("SELECT 1 FROM users WHERE social_id=?s",$social_id);
if($exists){
	//тут устанавливаются куки
}else{
	$db->query("INSERT INTO users (social_id) VALUES (?s)", $social_id); 
}
(выводить бессмысленные okay или  oops не нужно)
Нельзя выполнить подряд два запроса с MYSQLI_USE_RESULT. Необходимо сначала закрыть первый запрос через $result->free(). В вашем случае, если данные по запросу дальше не используются, то лучше использовать не num_rows, а COUNT(*).