Php 如何在给定ID的情况下获取未知用户名?

Php 如何在给定ID的情况下获取未知用户名?,php,session,mysqli,Php,Session,Mysqli,我得到了一个20个字符的数字ID,看起来像是10527391670258314752,给定这个ID,我如何获得与之关联的用户名 该表如下所示: id | name | password | balance 10527391670258314752 | Jhon | 12345 | 12.51 session_start(); $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$ch

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

该表如下所示:

id                   | name | password | balance   
10527391670258314752 | Jhon | 12345    | 12.51
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'];
然后,从数据库检索到的用户名应存储到
$\u会话['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()
而不是名称。

这实际上是一个非常好的问题,对于堆栈溢出几乎没有好的答案

基本上,使用mysqli执行SELECT查询需要以下步骤:

  • 创建正确的SQL SELECT语句,并用问号(称为占位符或参数)替换查询中的所有变量
  • 准备生成的查询
  • 将所有变量绑定到先前准备的语句
  • 执行该语句
  • 从语句中获取mysqli结果变量
  • 获取您的数据
详细的解释可以在我的文章中找到,还有一个简化例程的助手函数

下面是您的代码

$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 
现在,您可以将用户名存储在会话变量中:

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

这实际上是一个非常好的问题,对于堆栈溢出几乎没有好的答案

基本上,使用mysqli执行SELECT查询需要以下步骤:

  • 创建正确的SQL SELECT语句,并用问号(称为占位符或参数)替换查询中的所有变量
  • 准备生成的查询
  • 将所有变量绑定到先前准备的语句
  • 执行该语句
  • 从语句中获取mysqli结果变量
  • 获取您的数据
详细的解释可以在我的文章中找到,还有一个简化例程的助手函数

下面是您的代码

$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 
现在,您可以将用户名存储在会话变量中:

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

我强烈建议您避免使用mysqli扩展。您应该使用一些数据库抽象库,而不是直接使用mysqli函数;mysqli类不适合单独使用

如果您真的想纯粹使用mysqli类来实现这一点,那么您几乎没有选择

首先,您需要正确打开连接。这三条线路可确保您已准备好连接:

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\u result()

但是,不建议使用这种方法,也不太灵活。相反,最好获取整个结果集,并获取包含第一行的数组

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

作为PDO的替代方案,相同的代码如下所示:

id                   | name | password | balance   
10527391670258314752 | Jhon | 12345    | 12.51
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'];

我强烈建议您避免使用mysqli扩展。您应该使用一些数据库抽象库,而不是直接使用mysqli函数;mysqli类不适合单独使用

如果您真的想纯粹使用mysqli类来实现这一点,那么您几乎没有选择

首先,您需要正确打开连接。这三条线路可确保您已准备好连接:

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\u result()

但是,不建议使用这种方法,也不太灵活。相反,最好获取整个结果集,并获取包含第一行的数组

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

作为PDO的替代方案,相同的代码如下所示:

id                   | name | password | balance   
10527391670258314752 | Jhon | 12345    | 12.51
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'];

为什么要使用mysqli?你在开始一个新项目吗?如果是,请使用PDO。为什么要使用mysqli?你在开始一个新项目吗?如果是,请改用PDO。