2012-04-18 2 views
1

현재 한 영역에서 작동하지만 다른 영역에서는 작동하지 않는 데이터베이스 호출이 있습니다.PHP PDO 액세스 문제

데이터베이스 클래스의 이름이 $ database이고 데이터베이스 생성자에 전달 된 $db PDO 개체가 있습니다.

이 모든 것이 정상적으로 작동합니다.

이 코드 호출이 기능이 예상대로 사용자 정보를 반환

public function get_user($user){ 
     $user = $this->db->quote($user); 
     $query = "SELECT * FROM login where username = $user"; 
     $user = $this->db->query($query); 
     $user_info = $user->fetch(); 
     return $user_info;} 

라고

$user_info = $database->get_user($user); 

작동

또 다른 호출은

 $user = $database->confirm($confirm); 
     $user_info = $database->get_user($user); 

는 C이다 onfirm 함수는 다음과 같습니다.

 public function confirm($confirm){ 
     $confirm = $this->db->quote($confirm); 
     $query = "SELECT * FROM temp_data WHERE hash = $confirm;"; 
     $count = $this->db->query($query); 
     $info = $count->fetch(); 

     $user = $info['username']; 
     $user = $this->db->quote($user); 
     $query = "DELETE FROM temp_data WHERE username = $user;"; 
     $this->db->exec($query); 
     $query = "UPDATE login SET confirm = '1' WHERE username = $user;"; 
     $this->db->exec($query); 
     return $info['username'];} 

이 호출은 완벽하게 작동합니다.

그것은는 get_user 나는 문제 해결을 수행하고 문제가 get_user에 다음 줄이 어떤 PDO 개체를 반환하지 않는 것을 발견

실패 그러나 get_user

을 받아들이는 인용 부호로 둘러싸이지 않은 형식으로 사용자 이름을 반환 또는 모든 데이터

$user = $this->db->query($query); 

이것은 흥미로운 부분입니다. 나는 try catch를했고 PDO는 PDO 예외를 던지지 않고 일반적인 예외를 던지지도 않습니다. 오류 로그에 오류가 없습니다. 그것은 단지 작동하지 않는 것처럼 보입니다. 나는 결과를 출력하기 위해 Print_r, get_classecho 다음에 die;을 사용하여 단계별로 진행했으며 두 번째 데이터베이스 호출을 수행 할 때까지 모두 작동합니다. 가져 오기가 오류를 반환하지만 그것은 exec가 전혀 실행되지 않는다는 사실에 기인합니다.

unset()을 사용하여 내 기본 DB 연결을 만들고 사용하려고 시도했을 때 스크립트가 임의의 해시

  • 시스템은 GET에서 해시를 가져오고 너무 당겨 것을 사용하여 링크를

    1. 사용자의 클릭을 실행할 때 그것은

      다음

      무슨 일이 일어나고있다 만들어집니다 임시 데이터베이스의 사용자 이름

    2. 그런 다음 확인 된 사용자를 수정하고 임시 항목을 삭제 한 다음 사용자 이름
    3. 을 반환 한 다음 get_user을 호출합니다. 이 경우 사용자 정보가 반환되어 twilio 하위 계정을 설정합니다.이것은 시스템이 실패하고있는 곳입니다
    4. 그 다음에 무슨 일이 일어 났습니까 (그리고 여기서 오류가 나기 때문에 테스트를하려고합니다) 그것은 twilio API에 액세스하고 AUTH와 SID 토큰을 가져 와서 쓰기 때문입니다 그것은 사용자가 다음 새 사용자가 로그인 페이지 I 가까이 커서를 사용하여 시도하고 그것이 작동하지

    로 재

  • 이 파일에.

    누군가가 내가 가지고있는 문제에 대해 어떤 통찰력도 줄 수 있거나 내가 잘못하고있는 것이 있다면 감사 할 것입니다. PDO 개체를 처음 사용하기 때문에 어딘가에서 어리석은 실수를 범했다고 확신합니다.

  • +0

    귀하의 문제에 대한 답변을 얻지 못했습니다. 하지만 왜 bindParam() 메서드를 사용하여 값을 SQL에 이스케이프하는 것과 바인딩하지 않습니까? – stUrb

    +0

    '$ info'에는 무엇이 들어 있습니까? 어쩌면이 배열은 비어있을 수 있습니다. 결과적으로 두 번째 질의는'username '이''' ''' – stUrb

    +0

    인 것으로 확인되고 잘 작동한다. get_user와 문제가있어 $ info가 올바른 정보를 다시 찾는다. – StevenDStanton

    답변

    1

    저는 PHPFreaks IRC 채널에서 훌륭한 사람으로부터 답을 얻을 수있었습니다.

    public function get_user($user){ 
         $stmt = $this->db->prepare('SELECT * FROM login where username = :u'); 
         $stmt->bindValue(':u', $user); 
         $stmt->execute(); 
    
         $user_info = $stmt->fetch(); 
         $stmt->closeCursor(); 
    
         return $user_info; 
    } 
    
    
    public function confirm($confirm){ 
         $stmt = $this->db->prepare('SELECT * FROM temp_data WHERE hash = :h'); 
         $stmt->bindValue(':h', $confirm); 
         $stmt->execute(); 
         $info = $stmt->fetch(); 
         $stmt->closeCursor(); 
    
         $stmt = $this->db->prepare('DELETE FROM temp_data WHERE username = :u'); 
         $stmt->bindValue(':u', $info['username']); 
         $stmt->execute(); 
    
         $stmt = $this->db->prepare('UPDATE login SET confirm = '1' WHERE username = :u'); 
         $stmt->bindValue(':u', $info['username']); 
         $stmt->execute(); 
    
         return $info['username']; 
    }