从 MySQL 检索数据 - 仅登录用户

Posted

技术标签:

【中文标题】从 MySQL 检索数据 - 仅登录用户【英文标题】:Retrieving Data from MySQL - only logged in user 【发布时间】:2015-11-18 07:50:15 【问题描述】:

我现在正在构建一个新项目并完成了我的登录/注册脚本。到目前为止它正在工作,但现在我需要一个新功能,但我不确定我应该如何做到这一点。

如果用户成功登录,用户将看到的第一页是他的个人资料。在此页面上,我通过以下查询获取数据:

<?php 
session_start();

if(empty($_SESSION)) // if the session not yet started
   session_start();

if(!isset($_SESSION['email']))  //if not yet logged in
   header("Location: login.php");// send to login page
   exit;


include 'header.php';

$get = "SELECT * FROM user" or die(mysql_error());
$result_get = mysqli_query($connect, $get);
$_SESSION['data'] = mysqli_fetch_assoc($result_get);
 
?>

在我的 html 代码中,我使用以下代码获取数据:

Firstname: <?php echo $_SESSION['data']['firstname']; ?>
Lastname: <?php echo $_SESSION['data']['lastname']; ?>
Username <?php echo $_SESSION['data']['username']; ?>

现在的问题是,我只需要显示当前登录用户的数据。现在我的查询是“SELECT * FROM user”,但我想我可以将此查询更改为仅数据从当前登录的用户接收。像“SELECT * FROM user WHERE SESSION”这样的东西?!

我不确定如何实现。

【问题讨论】:

"SELECT * FROM user WHERE email = '".$_SESSION['email']."'" 假设电子邮件是您用户表中的字段名称。 警告:检测到主要的货物崇拜编程:$sql = "..." or die()?字符串分配不会失败,也不会触发数据库错误,也绝对不会触发mysql 错误,因为您在其他地方使用mysqli $_SESSION['data']['firstname'] 为什么不只是$_SESSION['firstname'] 确保在 sql 表定义中也将电子邮件字段设置为 unique @DipenShah 非常感谢!这正是我一直在寻找的!谢谢你!! 【参考方案1】:

你可以这样做:

<?php
# Store the user input username
if (isset($_SESSION['email']) && strlen($_SESSION['email']) > 0) 
    $email = $_SESSION['email'];
 else 
    // Die the error
    printf('No email address available');
    exit;


# Set DB connection details
$DBHost = 'localhost';
$DBUser = 'username';
$DBPass = 'password';
$DBName = 'database';
// Configure error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

# Create a database connection for PHP to use
$link = mysqli_connect($DBHost, $DBUser, $DBPass, $DBName);
// Set encoding type to uft8
mysqli_set_charset($link, 'utf8mb4');

# Query the database
// Build the query
$query = 'SELECT `firstname`,`lastname`,`username` FROM `table` WHERE `email` = ? LIMIT 1 ';
// Prepare it
$stmt = $link->prepare($query);
// Bind in the user input data so as to avoid SQL injection
$stmt->bind_param('s', $email);
// Execute the query
$stmt->execute();
// Bind the results to some variables
$stmt->bind_result($firstname, $lastname, $username);
// Fetch the data
$stmt->fetch();
// Close the query
$stmt->close();

# Build the html
$pageHtml = '
<p>First Name: '.$firstname.'</p>
<p>Last Name: '.$lastname.'</p>
<p>User Name: '.$username.'</p>
';

# Display the html
echo $pageHtml;

进一步阅读

MySQLi 手册:

http://php.net/manual/en/book.mysqli.php

关于 MySQLi 连接:

http://php.net/manual/en/mysqli.quickstart.connections.php

关于 MySQLi 预处理语句:

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

关于数据库表索引和使用它们的“位置”...双关语:)

How does database indexing work?

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

【讨论】:

@ChristophC。没问题,我们都需要在某个时候对此进行参考 :) 顺便说一句,我在查询中添加了LIMIT 1,因为理想情况下您只想返回一条记录,以防万一出于某种原因有多个值要返回.您可以通过在数据库中的表中的 email 字段上使用唯一索引来避免这种可能性,如果您选择此选项,则需要进行测试以确保正确添加用户并在电子邮件中收到提示已经存在。

以上是关于从 MySQL 检索数据 - 仅登录用户的主要内容,如果未能解决你的问题,请参考以下文章

PHP / Mysql 无法从 sql 数据库中检索当前登录的 first_name

如何限制用户仅从 Cloud Firestore 检索他们的数据?

React 应用程序使用 Laravel 进行 API 和用户登录。关于从数据库中检索当前登录用户的问题

从 Firebase 中的特定 ID 列表中检索数据,关注用户并仅获取他们的帖子

Firebase 在 Swift 中检索数据

从firebase检索数据到android