2016-09-23 3 views
0

세션을 설정하고 준비된 명령문에 바인딩하려면 어떻게해야합니까? mysqli의 결과가 이메일의 세션 [ 'email']과 일치 할 수 있도록하려면 어떻게해야합니까? 기본적으로 바인딩php prepared statement 세션을 바인드

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

this $ user = 사용자 :: getById ($ _ 세션 [ '이메일']); 너무 metod를 호출하고 지금은 작동합니다 –

+0

다행 니콜라 솔레 – KDOT

+0

나는 또 다른 질문이 있습니다. 왜 내가 내 테이블에서 모든 열을 바인딩해야하며 그것이 개인 경우에도 내 비밀 번호로 안전하지 않은가 ?? –

0

그냥 PHP 변수와 자리 표시 자 사이에 포인터/참조를 설정합니다 : 그것은 단지 내 세션 이메일로 결과를 얻을 수 있도록

나는, 내가 동작하지 않습니다이 코드를 가지고 쿼리에서. 그게 전부 야. $email을 묶었으므로 $email이 변경된 경우에도 의 변경 사항은 $_SESSION['email']에 영향을 미치지 않습니다. 과제가 완료되면 코드 링크가 없습니다.

이 대신 원하는 :

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

및 이와 유사한 때 bind_result뿐만 아니라위한. $email$_SESSION 사이에 링크가 없으므로 DB 가져 오기 호출이 $email에 들어가는 모든 항목은 세션 변수에 아무런 영향을 미치지 않습니다.