2012-11-04 6 views
2

작동하는데 문제가 있습니다. 내 오류가 준비된 구문의 구문에 있다고 생각하지만 여러 가지 방법을 사용해 보았습니다. 그 오류가 준비된 성명서에 의심되는 이유는 변수가 일치하지 않는 경우 페이지에서 echo Not a Match이 될 것이기 때문입니다.하지만 일치 할 때 오류가없는 빈 페이지 만 제공합니다. 여기에 내 코드가 있습니다. 누군가 다른 방법을 시도해봤을 때 오류를 발견 할 수 있습니다.PDO 준비 함수 문제

function setPass($conn, $userCurrent, $oldPass, $newPass, $verPass) 

{   
    $stmt= $conn->prepare('SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent'); 
    $stmt->execute(array(':userCurrent' => $userCurrent)); 
    while ($pass = $stmt->fetch()){ 
    $oldDbPass = $pass['password']; 
    } 

$new_pass = md5($newPass); 

    if (md5($oldPass) == ($oldDbPass) && ($newPass) == ($verPass)) { 
try{ 
     $stmt= $conn->prepare('UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent'); 
     $stmt->execute(array(':newpass' => $new_pass, ':userCurrent' => $userCurrent)); 
} catch (PDOException $e){ 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

     echo "Match"; 
    } else { 
     echo "Not a Match"; 

    } 

} 

답변

4

backticks와 괄호를 혼동하고 있습니다. 역 따옴표 "`"를 사용하여 SQL의 테이블 및 열 이름을 이스케이프합니다.

  • $newPass

    은 낙타 표기법으로 선언하지만, 두 번째 execute 성명에서 $new_pass로 사용됩니다

    SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent 
    
    UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent 
    

    는 또한 몇 가지 오타가 있습니다.

  • 내가 PDO 문은 대소 문자를 구분 있는지 확실하지 않습니다,하지만 당신은 :newPass로 PDO 변수를 선언하고 미래를위한 execute

:newpass로 사용하고,에 처리/오류 검사에 대해 읽어 PDO :

+0

방금 ​​추천 한 것과 같은 결과를 얻었습니다. – Yamaha32088

+0

Ok 오류 처리를 활성화하고이 메시지가 표시됩니다. 연결 실패 : SQLSTATE [HY093] : 잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다. ' – Yamaha32088

+0

귀하의 제안에 따라 코드를 작성하고 변경 사항을 반영하도록 제 질문을 편집했습니다. – Yamaha32088