Как правильно связать php сайт с mysql?
На частные вопросы ответили в комментариях, поэтому ответим на вопрос из заголовка.

Чтобы соединить сайт с mysql, в РНР вообще-то есть два API - mysqli и PDO. Несколько лет назад с mysqli вообще невозможно было нормально работать, но на данный момент они выровнялись, хотя PDO все равно удобнее, по трем причинам

Единый интерфейс при работе с различными СУБД (неактуально, если mysql для нас является синонимом слова база данных)
Набор функций-хелперов для получения данных из БД в различных форматах (при желании легко воспроизводится вручную)
Именованные плейсхолдеры (для некоторых это главная причина использовать PDO)

Но в целом, как я говорил выше, сейчас можно использовать любое API. Главное - не использовать тот древний говнокод, который приведён в вопросе. 

1. Создаём файл`config.sample.php` куда кладем все настройки приложения, в том числе базы данных
return [
	'db' => [
		'host' => '127.0.0.1',
		'username' => '',
		'password' => '',
		'dbname' => '',
		'port' => 3306,
		'charset' => 'utf8mb4',
	],
];
2. В файле, который включается во все скрипты сайта, добавляем код
if (!file_exists('config.php'))
{
	throw new \Exception('Create config.php based on config.sample.php');
}
$config = require 'config.php';
3. И дальше в этом же файле пишем собственно нормальный  код подключения к БД 
либо к mysqli
// включаем режим информирования об ошибках
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// подключаемся к серверу
$dbc = $config['db'];
$db = new \mysqli($dbc['host'], $dbc['username'], $dbc['password'], $dbc['dbname'], $dbc['port']);
// не забываем установить кодировку, чтобы не было ошибок с кракозябрами
$db->set_charset($dbc['charset']);
либо к PDO
$options = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$dbc = $config['db'];
$dsn = "mysql:host=$dbc[host];dbname=$dbc[dbname];charset=$dbc[charset];port=$dbc[port]";
$pdo = new \PDO($dsn, $dbc['username'], $dbc['password'], $options);
После того как будет освоена работа с системой контроля версий (а по-хорошему это надо было сделать уже давно) добавляем config.php в файл .gitignore
Таким образом на каждом хосте, где исполняется этот код, будет собственный файл с настройками, создаваемый по образцу из  config.sample.php

Да, и Очень Важное Дополнение:
почему нельзя сделать 1 соединение для сайта и не тратить каждый раз время на коннект к БД?
Никогда не следует переживать по поводу воображаемых проблем. Вот только когда создание коннекта каждый раз станет реальной проблемой, только тогда и начинать переживать по этому поводу и искать пути решения (спойлер: никогда).
Вы все написали верно. 
Закрывать подключение не требуется.

Насчет качества тоже все допустимо. В вашем случае просто используется процедурный стиль подключения.
Можно использовать и объектно-ориентированный, как показал на примере пользователь FanatPHP