¿Cómo puedo obtener una identificación para un nombre de usuario desconocido?
Obtuve una identificación numérica de 20 caracteres que se parece a 10527391670258314752. Dada esta identificación, ¿cómo puedo obtener el nombre de usuario asociado con ella?
La tabla se ve así:
id | name | password | balance
10527391670258314752 | Jhon | 12345 | 12.51
El nombre de usuario recuperado de la base de datos debe almacenarse en $_SESSION['name']
.
He probado esto:
$connection = mysqli_connect('localhost', 'root', '', 'user_data');
$id = '10527391670258314752';
$query = "SELECT username FROM user_data WHERE id = '$id'";
$result = mysqli_query($connection, $query);
$record = mysqli_fetch_array($id);
$_SESSION['id'] = $record;
echo $_SESSION['id'];
La salida es Array()
en lugar del nombre.
En realidad, es una muy buena pregunta que casi no tiene buenas respuestas en Stack Overflow.
Básicamente necesitas los siguientes pasos para realizar una consulta SELECT usando mysqli:
- cree una instrucción SQL SELECT correcta y reemplace todas las variables en la consulta con signos de interrogación (llamados marcadores de posición o parámetros)
- Preparar la consulta resultante.
- Vincular todas las variables a la declaración previamente preparada.
- Ejecutar la declaración
- obtenga la variable de resultado de mysqli de la declaración.
- recuperar tus datos
La explicación detallada se puede encontrar en mi artículo Cómo ejecutar una consulta SELECT usando Mysqli , así como una función auxiliar para simplificar la rutina.
Siguiendo este plan aquí está tu código
$sql = "SELECT * FROM users WHERE id=?"; // SQL with parameters
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $id);
$Stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$user = $result->fetch_assoc(); // fetch the data
ahora puedes almacenar el nombre de usuario en la variable de sesión:
$_SESSION['name'] = $user['name'];
Le recomiendo encarecidamente que evite la extensión mysqli. Debería utilizar alguna biblioteca de abstracción de bases de datos en lugar de utilizar las funciones mysqli directamente; la clase mysqli no es adecuada para usarse por sí sola.
Si realmente quieres hacerlo únicamente con la clase mysqli, tienes pocas opciones.
Primero, necesitas abrir la conexión correctamente. Estas 3 líneas aseguran que tienes la conexión lista:
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
Luego necesitas preparar una declaración, vincular el parámetro y ejecutarlo.
$id = '10527391670258314752';
$stmt = $mysqli->prepare('SELECT username FROM user_data WHERE id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
Una vez que se ejecuta la declaración, debe obtener los resultados. Si solo tiene una variable, simplemente puede usarbind_result()
$stmt->bind_result($_SESSION['name']);
$stmt->fetch();
echo $_SESSION['name'];
Sin embargo, este enfoque no se recomienda y no es muy flexible. En lugar de eso, es mejor buscar todo el conjunto de resultados y obtener una matriz que contenga la primera fila.
$result = $stmt->get_result();
$row = $result->fetch_array();
$_SESSION['name'] = $row['username'];
echo $_SESSION['name'];
Como alternativa con PDO, el mismo código se vería así:
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'];