¿Cómo puedo obtener una identificación para un nombre de usuario desconocido?

Resuelto Maryan175 asked hace 54 años • 2 respuestas

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.

Maryan175 avatar Jan 01 '70 08:01 Maryan175
Aceptado

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'];
Your Common Sense avatar Mar 18 '2020 14:03 Your Common Sense

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'];
Dharman avatar Mar 18 '2020 14:03 Dharman