2012-07-06 4 views
1

제대로 실행하고 있는지 확신 할 수 없지만 PDO로 작업하기 시작했으며 코드를 작동시킬 수 없습니다. "미안하지만 연결할 수 없습니다."오류가 계속 발생하고 잘못된 점을 파악할 수 없습니다. 이 $username$pass가 정의되지 않은 것으로 보인다PDO 확장 기능을 사용하는 로그인 스크립트가 작동하지 않습니다.

function doRun($data) 
    { 
     try 
     { 
      $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root'); 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

       $stmt = $db->prepare(' SELECT 
               username, pass 
             FROM  
               testTable 
             WHERE 
               username = :name 
             AND  
               pass = :pass 

            '); 

       $stmt->bindParam(':name', $username, PDO::PARAM_STR); 
       $stmt->bindParam(':pass', $pass, PDO::PARAM_STR); 

       $stmt->execute(); 

       //$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
       $result = $stmt->fetchColumn(); 

       if($result == false) 
       { 
        echo 'sorry could not connect'; 
       } 
       else 
       { 
        $_SESSION['username'] = $user; 

        echo 'logged in as' . $user; 
       } 

     } 
     catch (PDOException $e) 
     { 
      echo "throw"; 
     } 

     $db = NULL; 
    } 
+0

을 받고있다 :

는 다음 해결책을 시도해보십시오? 오류 로그의 내용은 무엇입니까? – cr125rider

+0

필자는 php_error 로그에서 아무 것도 얻지 않고 표시 오류가없는 것도 ini_set ('display_errors', 1); \t error_reporting (E_ALL | E_STRICT); 죄송합니다. 연결할 수 없습니다. – Reshad

+0

쿼리가 아무 것도 반환하지 않을 수도 있습니다. 테이블을 확인하십시오 – Ibu

답변

1

이 당신에게 0 행을 줄 것입니다 : 아래 포함

내가 사용하고있는 코드입니다

$stmt->bindParam(':name', $username, PDO::PARAM_STR); 
    $stmt->bindParam(':pass', $pass, PDO::PARAM_STR); 
          ^^^^^^^^^ 

당신은 아마 일부 요소는 원하는 함수에 사용자 이름과 암호로 제공하는 변수 $data에서 가져옵니다.

나중에 정의되지 않은 변수 $user을 사용하고 있습니다.

$data에는 무엇이 있습니까?

+0

고마워요! 그 트릭을 내가 이렇게 정의했다. $ username = $ _POST [ 'name']; $ pass = $ _POST [ 'pass']; 시도 바로 위에 있지만 올바른 방법입니까? – Reshad

+0

@ user1453253 실제로, 당신은 평소에'POST' 변수에 처리를하고 (꼭 필요한 것은 아닙니다) 평문의 패스워드를 저장하면 안됩니다. 소금에 절인 해쉬를 사용해야합니다. 그래서 그것에 대해). – jeroen

+0

아, 네, 해시 암호를 사용해야한다는 것을 알고 있습니다. 그러나 이것은 PDO가 작동하는 방법을 테스트하기위한 것입니다. 처리를 위해 이미 유효성 검사가 포함 된 FORM 클래스를 사용하므로 두 번 수행해야한다고 생각합니다 :) – Reshad

1

연결할 수 있지만 일치하지 않는 이유는 사용자 변수가 정의되어 있지 않기 때문입니다. 응답은 당신이 무엇을

<?php 

function doRun($data) 
{ 
    $msg = ''; 
    $username = isset($_POST['name']); 
    $pass = isset($_POST['pass']); 

    try 
    { 
     $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $db->prepare(' 
      select 
       username 
       ,pass 
      from 
       testTable 
      where 
       username = :name 
       and pass = :pass 
     '); 
     $stmt->execute(array(':name' => $username, ':pass' => $pass); 
     $result = $stmt->fetchAll(); 

     if(!empty($result)){ 
      $_SESSION['username'] = $user; 
      $msg = "logged in as $user";   
     }else{ 
      $msg = "Unable to connect"; 
     } 

    } catch (PDOException $e) { 
     echo "Error: $e"; 
    } 

    echo $msg 

    $db = NULL; 
} 
?> 
관련 문제