How can I get an unknown username given an ID?

最后都变了- 提交于 2020-05-03 04:14:32

问题


I got a numerical ID of 20 characters witch looks like 10527391670258314752, given this ID, how can I get the username associated with it?

The table looks like this:

id                   | name | password | balance   
10527391670258314752 | Jhon | 12345    | 12.51

The username retrieved from the database should then be stored into $_SESSION['name'].

I've tried this:

$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'];

The output is Array() instead of the name.


回答1:


I would strongly recommend to avoid mysqli extension. You should use some database abstraction library instead of using the mysqli functions directly. mysqli class is not suited to be used on its own.

If you really want to do it with pure mysqli class, you have few options.

First, you need to open the connection properly. These 3 lines ensure you have the connection ready:

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

Then you need to prepare a statement, bind the parameter and execute it.

$id = '10527391670258314752';
$stmt = $mysqli->prepare('SELECT username FROM user_data WHERE id=?');
$stmt->bind_param('s', $id);
$stmt->execute();

Once the statement is executed you need to fetch the results. If you have only one variable you could simply use bind_result()

$stmt->bind_result($_SESSION['name']);
$stmt->fetch();
echo $_SESSION['name'];

However, this approach is not recommended and not very flexible. Instead it's better to fetch the whole result set and get an array containing the first row.

$result = $stmt->get_result();
$row = $result->fetch_array();
$_SESSION['name'] = $row['username'];
echo $_SESSION['name'];

As an alternative with PDO the same code would look like this:

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'];



回答2:


That's actually a very good question that has almost no good answers on Stack Overflow.

Basically you need the following steps to perform a SELECT query using mysqli:

  • create a correct SQL SELECT statement and replace all variables in the query with with question marks (called placeholders or parameters)
  • Prepare the resulting query
  • Bind all variables to the previously prepared statement
  • Execute the statement
  • get the mysqli result variable from the statement.
  • fetch your data

The detailed explanation can be found in my article, How to run a SELECT query using Mysqli, as well a helper function to simplify the routine.

Following this plan here is your code

$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 

now you can store the username in the session variable:

$_SESSION['name'] = $user['name'];


来源:https://stackoverflow.com/questions/60741213/how-can-i-get-an-unknown-username-given-an-id

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!