一尘不染

给定ID如何获取未知的用户名?

php

我得到一个20个字符的数字ID,看起来像 10527391670258314752 ,给定这个ID,我如何获得与之关联的用户名?

该表如下所示:

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

然后将从数据库中检索出的用户名存储到中$_SESSION['name']

我已经试过了:

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

输出将Array()代替名称。


阅读 269

收藏
2020-05-26

共1个答案

一尘不染

我强烈建议避免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'];
2020-05-26