Я настоятельно рекомендую избегать расширения mysqli. Вы должны использовать некоторую библиотеку абстракций базы данных вместо непосредственного использования функций mysqli. Класс mysqli не предназначен для самостоятельного использования.
Если вы действительно хотите сделать это с чистым классом mysqli, у вас есть несколько вариантов.
Во-первых, вам нужно правильно открыть соединение. Эти 3 строки гарантируют, что соединение готово:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // enable error reporting
$mysqli = new mysqli('localhost', 'username', 'password', 'dbname');
$mysqli->set_charset('utf8mb4'); // always set the charset
Затем необходимо подготовить оператор, связать параметр и выполнить его.
$id = '10527391670258314752';
$stmt = $mysqli->prepare('SELECT username FROM user_data WHERE id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
После выполнения инструкции вам нужно получить результаты. Если у вас есть только одна переменная, вы можете просто использовать bind_result()
$stmt->bind_result($_SESSION['name']);
$stmt->fetch();
echo $_SESSION['name'];
Однако этот подход не рекомендуется и не очень гибкий. Вместо этого лучше получить весь набор результатов и получить массив, содержащий первую строку.
$result = $stmt->get_result();
$row = $result->fetch_array();
$_SESSION['name'] = $row['username'];
echo $_SESSION['name'];
В качестве альтернативы PDO тот же код будет выглядеть следующим образом:
session_start();
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
]);
$id = '10527391670258314752';
$stmt = $pdo->prepare('SELECT username FROM user_data WHERE id=?');
$stmt->execute([$id]);
$_SESSION['name'] = $stmt->fetchColumn();
echo $_SESSION['name'];