簡體   English   中英

使用PDO和會話從數據庫中選擇數據

[英]SELECT data from DB using PDO and sessions

嗨,我正在嘗試使用會話從我的數據庫中選擇項目。 我要顯示內容的頁面是profile.php頁面。 我可以使用戶成功登錄並使用表單插入數據。 但是我不確定如何使用PDO和會話選擇數據。 有人能幫助我嗎?

插入數據的表單(我現在試圖在配置文件頁面中顯示的數據)。

     require_once 'check.php';

function ArrayBinder(&$pdoStatement, &$array){
    foreach($array as $k=>$v){
        $pdoStatement->bindValue(':'.$k,$v);
    }
}


if(isset($_POST['full_name'])){
    $full_name = $_POST['full_name'];
    $username = $_POST['username'];
    $country = $_POST['country'];
    $bio = $_POST['bio'];
    $stmt = $dtb->prepare("UPDATE users SET full_name=:full_name, username=:username, country=:country, bio=:bio WHERE id=:log_user_id AND username=:log_uname LIMIT 1");
    $arr = array(
        "full_name"     =>  $full_name,
        "username"      =>  $username,
        "bio"           =>  $bio,
        "country"       =>  $country,
        "log_user_id"   =>  $log_user_id,
        "log_uname"     =>  $log_uname
    );
    ArrayBinder($stmt,$arr);
    try{
        $stmt->execute();
        echo "Your info has been updated";
        $dtb = null;
        exit();
    }
    catch(PDOException $e){
        echo $e->getMessage();
        $dtb = null;
        exit();
    }
}

Check_user.php

      session_start();

require("db_connect.php");

$user_is_logged = false;
$log_user_id = "";
$log_uname = "";
$log_pass = "";
if(isset($_SESSION['uid']) && isset($_SESSION['username']) && isset($_SESSION['password'])){
    // LOCAL VARIBALES FOR SESSIONS
    $log_user_id = preg_replace('#[^0-9]#', '', $_SESSION['uid']); // STRIPS EVERYTHING BUT NUMBERS AND REPLACES IT WITH NOTHING
    $log_uname = preg_replace('#[^a-z0-9]#i', '', $_SESSION['username']); // ONLY ALLOWS NUMBERS AND LETTERS 
    $log_pass = preg_replace('#[^a-z0-9]#i', '', $_SESSION['password']); // ONLY ALLOWS NUMBERS AND LETTERS 
    $stmt = $dtb->prepare("SELECT * FROM users WHERE id=:log_user_id");
    $stmt->bindValue(':log_user_id',$log_user_id,PDO::PARAM_INT);
    try{ // IF USER EXSISTS IN SYSTME AND THE SESSIONS ARE ACTIVE THEN THE USER IS LOGGED VAIRABLE WILL BE SET TO TRUE.
        $stmt->execute();
         if($stmt->rowCount() > 0){
             $user_is_logged = true;
         }
    }
    catch(PDOException $e){ // CATCH ERRORS AND RETURN FALSE SO THAT DTB QUERIES AREN'T ECHOED OUT.
        return false;
    }
}else if(isset($_COOKIE['id']) && isset($_COOKIE['username']) && isset($_COOKIE['password'])){
    $_SESSION['uid'] = preg_replace('#[^0-9]#', '', $_COOKIE['id']);
    $_SESSION['username'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['username']);
    $_SESSION['password'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['password']);
    $log_user_id = $_SESSION['uid'];
    $log_uname = $_SESSION['username'];
    $log_pass = $_SESSION['password'];
    $stmt = $dtb->prepare("SELECT * FROM users WHERE id=:log_user_id LIMIT 1");
    $stmt->bindValue(':log_user_id',$log_user_id,PDO::PARAM_INT);
    try{
        $stmt->execute();
         if($stmt->rowCount > 0){
             $user_is_logged = true;
         }
    }
    catch(PDOException $e){
        return false;
    }
    if($user_is_logged == true){
        $dtb->query("UPDATE users SET lastlog=now() WHERE id='$log_user_id' LIMIT 1");
    }
}
$sth = $dtb->prepare("SELECT * FROM `users` WHERE `username`=:username");
$sth->execute(array(
    ':username' => $_SESSION['username']
));

然后,您可以執行fetch()fetchAll()

$result = $sth->fetch();
/** Array ( 
        ['full_name'] => 'John Smith' 
        ['user_name'] => 'iLikePie' 
    ) etc. **/

要么

$result = $sth->fetchAll();    
/** Array ( 
[0] => Array ( 
        ['full_name'] => 'John Smith' 
        ['user_name'] => 'iLikePie'
    ) 
[1] => Array ( 
        ['full_name'] => 'Another Guy With The Same Username' 
        ['user_name'] => 'iLikePie'
    )
) etc. **/

我建議使用fetch() ,因為那樣只會使您成為第一個匹配的用戶。 然后可以將查詢結果分配給這樣的變量:

$bio = $result['bio'];

echo $bio;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM