2012-10-10 10 views
1

PHP 스크립트를 사용하여 사용자 비밀번호를 재설정하고 있습니다. 전자 메일과 토큰 확인 설정을 사용하므로 사용자가 재설정 할 수 있도록 허용해야합니다. 지금까지 모든 것이 데이터베이스에 암호를 삽입하는 지점까지 작동합니다. ,PHP PDO가 SQL 명령을 실행하지 않습니다.

try { 
    $sql = "UPDATE users 
      SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
      WHERE sessionID=:sessionID"; 
    $update = $con->prepare($sql); 
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR); 
    $update->bindValue("sessionID", "0", PDO::PARAM_STR); 
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR); 
    $update->execute(); 
    echo "<br /> Successfully updated the password!"; 
} catch(PDOException $e) { 
    throw new Exception('something went wrong with the password reset', 0, $e); 
} 

$salt$password이 이전에 정의 된, 그리고 스크립트를 실행하면 Successfully updated the password! 출력 : 여기 내 PDO에 대한 코드입니다 (나는 그것을 통해 한 눈에 쉽게 그래서 그 부분에서 SQL 쿼리를 끊었다) 그러나, 내 데이터베이스에 아무것도 변경됩니다. 쿼리를 복사하여 phpMyAdmin에 붙여 넣고 :name 매개 변수를 실제 문자열로 변경하면 데이터베이스가 완벽하게 작동하고 오류가 반환되지 않습니다. php_error.log에 아무것도 표시되지 않아서 아닙니다. 이것이 왜 작동하지 않는지 정말로 확신합니다.

도움을 주시면 감사하겠습니다. 감사합니다.

답변

1

당신이 결과를 아래와 같이 ERRORINFO으로 스크립트를 실행하고보고 할 수 :

<?php 

try { 
    $sql = "UPDATE users 
      SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
      WHERE sessionID=:sessionID"; 
    $update = $con->prepare($sql); 
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR); 
    $update->bindValue("sessionID", "0", PDO::PARAM_STR); 
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR); 
    $update->execute(); 

    var_dump($update->errorInfo()); 
    echo "<br /> Successfully updated the password!"; 
} catch(PDOException $e) { 
    throw new Exception('something went wrong with the password reset', 0, $e); 
} 
+0

그래을, 이것은 내가 돌아 왔을 것입니다 :'배열을 (3) {[0] => 문자열 (5) "00000 "[1] => NULL [2] => NULL}', 그것이 효과가 있다고 말하는 것과 함께. – John

+0

해시를 반향하는 경우 ("sha256", $ password. $ salt); 너는 무엇을 얻 느냐? 또한 sessionID = '0'인 경우 'sessionID'를 설정하는 것을 볼 수 있습니다. 따라서 sessionID에는 두 개의 자리 표시자가 있지만 한 번만 바인딩합니다. –

+0

해시가 반환해야하는 것은 무엇인지 반환합니다. 이전에 오류 검사를 해왔습니다. 하지만'sessionID'는 효과가있었습니다! 이전에 정의 된 줄 알았지 만 이러한 종류의 쿼리를 수행 할 때마다 바인딩해야한다는 사실을 잊어 버렸습니다. 이제 완벽하게 작동합니다. 감사합니다! – John

관련 문제