2013-04-29 2 views
0

메신저 아직 초기 학습 단계에 있으며 단서를 찾는 벽에 머리를 두드리는 소리가납니다. Iv는 사용 설명서를 읽지 않았습니다. phpAcadamy 튜토리얼 'Register & 로그인'을 기반으로 시스템에 사용자 로그인을 구축합니다. 그들은 튜토리얼에서 mysql_connect를 사용하지만, 나는 mysql에 PDO 연결을 사용하고있다.PDO를 사용하는 user_exists 함수가 mysql에 연결

내 첫 번째 함수 user_exists는 POST 된 $ username과 일치하는 이름에 대해 내 테이블의 사용자 이름 열을 쿼리 한 다음 true 또는 false를 반환합니다. 바닥에 문이 위의 기능을 테스트해야하는 경우

$host  = "localhost"; 
$username = "mholberg_skroovy"; 
$password = "*omitted*"; 
$dbname  = "mholberg_skroovytest"; 

$db = new PDO("mysql:host={$host};dbname={$dbname};", $username, $password); 

function user_exists($username) { 
    $query = $db->query("SELECT `users`.`username` FROM `users` WHERE `username` = '$username'"); 
    return($query, 0) == 1) ? true : false; // ??? 
} 

if (user_exists('junkomatic') === true) { 
    echo 'exists'; 
} 

die(); 

:

여기 내 테스트 코드입니다. ???와 라인? 명백하게 틀린 선이다. 임 '에 오류가 발생했습니다. 모든 입력/설명은 대단히 감사하겠습니다.

+2

당신은 확실히 아래에 답변을 가지고,하지만 난 궁금 :

이 대신 같은 것을해야 할 것입니다. return ($ query, 0) == 1)은 무엇입니까? 허위 사실; 정말? (나는 전에 그것을 보지 못했습니다) – bestprogrammerintheworld

+0

@bestprogrammerintheworld 이론상 오류가 발생했습니다. 어쨌든 누락 된 괄호가 있습니다! – Ivo

+0

@bardoo - 더 자세히 설명하려고 노력했습니다. 나는 당신의 실제 코드가 무엇을하고 있는지 모른다. 그러나 내가 어떻게했을지를 대답했다. (사용자가있을 때 true로 돌아 간다.) – bestprogrammerintheworld

답변

-1

수정하기 쉬운 것처럼 보입니다. 결과 세트에서 아무 것도 가져 오기 전에 준비된 쿼리를 실행하기 만하면됩니다.

$stmt->execute(); 
+0

"$ stmt"는 어디에서 왔습니까? (나는 이것이 문서의 "$ statement"라는 것을 알고 있지만 OP는 그것을 사용하지 않았다) 왜이 대답이 받아 들여 졌는가?! –

+0

@DiegoNunes 아마 그에게 문서로 직접 나머지를 들여다 보는 데 필요한 정보를 주었을 것입니다. 개념적으로 그것은 코드에서 누락 된 유일한 부분이었습니다! 문을 실행하지 않고도 결과 집합에 액세스 할 수 없습니다! – Ivo

0

쿼리를 실행하지 않는 것 같습니다. 따라서 이것이 적절하게 작동하지 않는 것입니다. 당신은 방금 추가합니다 실행 명령을 추가 할 수 있습니다

$query = $db->query("SELECT `users`.`username` FROM `users` WHERE `username` = '$username'"); 
$query->execute(); 
1

귀하의 기능은 준비된 문을 사용하지 않습니다. $ db는 함수 내에 정의되어 있지 않으므로 코드에서 오류가 발생합니다.

function user_exists($db, $username) { 
    $query = $db->query("SELECT COUNT(`idUser`) FROM `users` WHERE `username` = :username"); 
    $query->execute(array(':username'=> $username)); 
    $cnt = $query -> fetch(); //Get actual count of users 

    return $cnt >= 1 ? true : false; //This will return true if count is one or larger else it would return false 
}