[英]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.