2016-09-23 111 views
0

如何設置SESSION並將其綁定到準備好的語句中,這樣我就可以從mysqli中得到結果,其中email等於我的SESSION ['email']?PHP準備語句綁定會話

我有這樣的代碼,我不能去上班,所以只得到結果與我的會話郵件:

public static function getById($email) { 

// Initialize session array 
$email = $_SESSION['email']; 

// Build database query 
$sql = "select * from users where email = ?"; 

// Open database connection 
$database = new Database(); 

// Get instance of statement 
$statement = $database->stmt_init(); 

// Prepare query 
if ($statement->prepare($sql)) { 

// Bind parameters 
$statement->bind_param('s', $email); 

// Execute statement 
$statement->execute(); 

// Bind variable to prepared statement 
$statement->bind_result($id, $first_name, $last_name, $username, $email,  $created, $active); 

// Populate bind variables 
$statement->fetch(); 

// Close statement 
$statement->close(); 
} 

// Close database connection 
$database->close(); 

// Build new object 
$object = new self; 
$object->id = $id; 
$object->first_name = $first_name; 
$object->last_name = $last_name; 
$object->username = $username; 
$object->email = $email; 
$object->created = $created; 
$object->active = $active; 
return $object; 
} 
+0

我真的不明白問題是什麼,但覆蓋您發送給函數的參數可能不是您想要的。 – jeroen

+0

作用域作用域..'$ _SESSION'超級變量不能通過方法作用域訪問,你需要傳遞變量並確保你使用'session_start();' – KDOT

回答

1
$variable = "I am a variable"; 

function getVariable() { 
    echo $variable; 
} 

Q)爲什麼上面的腳本會出錯? A)示波器...

$_SESSION['email']無法在您的方法內部訪問,您需要全局或定義它或將其作爲參數傳入。

function getById($email) 
{ 
    echo $email; 
} 

session_start(); 
getById($_SESSION['email']); 
+1

得到它使用這個$ user =用戶:: getById($ _ SESSION [ '郵件']);也稱爲metod,現在它工作 –

+0

很高興它幫助@nicolaiolsen – KDOT

+0

我還有一個問題。爲什麼我必須綁定我的表中的所有列,並且它與我的密碼不安全,即使它是私人的? –

0

主要綁定只設置一個PHP變量和佔位符之間的指針/引用在查詢中。而已。由於您綁定了$email,因此對$email的任何更改都不會影響$_SESSION['email'],即使這是$email的來源。一旦分配完成,他們之間就沒有代碼鏈接。

希望此相反:

$statement->bind_param('s', $_SESSION['email']); 

和類似的,當你bind_result爲好。在$email$_SESSION之間沒有鏈接,因此DB訪存調用填入$email的任何內容都不會影響會話變量。