php - 使用 PHP PDO / 函数从数据库中获取指定行
问题描述
我在使用下一个代码显示数据库中的其他行时遇到问题。当我键入时,我在home.php<?php echo $_SESSION['username']; ?>
上获得登录用户的用户名,但是当我想使用相同的代码从数据库中显示用户公司时,我没有在home.php上获得该行。我的代码如下所示:<?php echo $_SESSION['company']; ?>
配置文件
<?php
ob_start();
session_start();
date_default_timezone_set('Europe/London');
define('DBHOST','host');
define('DBUSER','user');
define('DBPASS','pass');
define('DBNAME','dbname');
define('DIR','localhost');
define('SITEEMAIL','email@host.com');
try {
$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
include('classes/user.php');
include('classes/phpmailer/mail.php');
$user = new User($db);
?>
用户.php
<?php
include('password.php');
class User extends Password{
private $_db;
function __construct($db){
parent::__construct();
$this->_db = $db;
}
private function get_user_hash($username){
try {
$stmt = $this->_db->prepare('SELECT password, username, memberID FROM tableName WHERE username = :username AND active="Yes" ');
$stmt->execute(array('username' => $username));
return $stmt->fetch();
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}
public function login($username,$password){
$row = $this->get_user_hash($username);
if($this->password_verify($password,$row['password']) == 1){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $row['username'];
$_SESSION['memberID'] = $row['memberID'];
return true;
}
}
public function logout(){
session_destroy();
}
public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
return true;
}
}
}
?>
主页.php
<?php
require('includes/config.php');
if(!$user->is_logged_in()){ header('Location: login.php'); }
?>
在正文中,当我想显示用户信息时,我输入以下行代码:
<?php echo $_SESSION['username']; ?> **WORKING**
<?php echo $_SESSION['company']; ?> **NOT WORKING**
我认为问题出在某些功能或需要创建另一个功能以从数据库中检索所有字段,但是如果有人可以帮助我,那就太好了。谢谢大家
解决方案
请参阅下面的更新user.php
。问题是,您没有从中选择列company
,db
也没有设置会话。
<?php
include('password.php');
class User extends Password{
private $_db;
function __construct($db){
parent::__construct();
$this->_db = $db;
}
private function get_user_hash($username){
try {
$stmt = $this->_db->prepare('SELECT password, username, memberID, company FROM tableName WHERE username = :username AND active="Yes" '); //included the column company
$stmt->execute(array('username' => $username));
return $stmt->fetch();
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}
public function login($username,$password){
$row = $this->get_user_hash($username);
if($this->password_verify($password,$row['password']) == 1){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $row['username'];
$_SESSION['memberID'] = $row['memberID'];
$_SESSION['company'] = $row['company']; //Added this line
return true;
}
}
public function logout(){
session_destroy();
}
public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
return true;
}
}
}
?>
推荐阅读
- graph - 通过 IMSUB 生成的值不会显示在数据透视表中,但使用手动键入的公式创建的值会显示
- c# - 本地 Nuget 镜像
- ios - 如何在swift中从键盘隐藏建议的电子邮件ID
- ios - iOS AR 3d 网格纹理(.obj)
- node.js - 从命令行(apk --update add),如何安装 node.js 的“当前最新功能”版本,而不是“为大多数用户推荐 LTS”?
- graphics - 我不知道在 formMouseReleased 事件中写什么
- reactjs - 在 React spfx 中获取日历覆盖详细信息
- javascript - 未在子文件夹路径上设置 Cookie
- azure-devops - 基于子文件夹提交运行 DevOps 代理作业
- javascript - Phaser3 中的随机星星