给定 ID 如何获得未知用户名?
How can I get an unknown username given an ID?
我得到一个 20 个字符的数字 ID 看起来像 10527391670258314752,给定这个 ID,我怎样才能得到与之关联的用户名?
table 看起来像这样:
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()
而不是名称。
这实际上是一个非常好的问题,在 Stack Overflow 上几乎没有好的答案。
基本上,您需要执行以下步骤才能使用 mysqli 执行 SELECT 查询:
- 创建正确的 SQL SELECT 语句并将查询中的所有变量替换为问号(称为占位符或参数)
- 准备结果查询
- 将所有变量绑定到之前准备好的语句
- 执行语句
- 从语句中获取 mysqli 结果变量。
- 获取您的数据
详细的解释可以在我的文章中找到,How to run a SELECT query using 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 class 不适合单独使用。
如果你真的想纯粹使用 mysqli class,你的选择很少。
首先,您需要正确打开连接。这 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'];
我得到一个 20 个字符的数字 ID 看起来像 10527391670258314752,给定这个 ID,我怎样才能得到与之关联的用户名?
table 看起来像这样:
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()
而不是名称。
这实际上是一个非常好的问题,在 Stack Overflow 上几乎没有好的答案。
基本上,您需要执行以下步骤才能使用 mysqli 执行 SELECT 查询:
- 创建正确的 SQL SELECT 语句并将查询中的所有变量替换为问号(称为占位符或参数)
- 准备结果查询
- 将所有变量绑定到之前准备好的语句
- 执行语句
- 从语句中获取 mysqli 结果变量。
- 获取您的数据
详细的解释可以在我的文章中找到,How to run a SELECT query using 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 class 不适合单独使用。
如果你真的想纯粹使用 mysqli class,你的选择很少。
首先,您需要正确打开连接。这 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'];