2012-07-23 2 views
0

이것이 정상적으로 작동하지 않는 이유는 무엇입니까? 나는 이것과 거의 똑같은 코드를 사용하는 웹 사이트의 다른 영역을 가지고 있으며 잘 작동한다. 나는 그것이 명백한 무엇인가 확실하다. 그러나 나는이 재료에 꽤 새로울 것이다. 오류 또는 기타 사항은 없습니다. 그것은 단지 아무것도하지 않습니다. $ name 변수는 잘 작동하고 (테스트 해 보았습니다.) 데이터베이스가 최신 상태입니다.PDO 쿼리가 작동하지 않음

try { 
    $db = new PDO($dbhost, $dbuser, $dbpassword); 
    $statement = $db->prepare("select first, last from users where email = $name"); 
    $result = $statement->fetch(); 
    $first = $result[first]; 
    $last = $result[last]; 
}catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
+0

이 답변이 "쿼리에서 $ name을 (를) 인용하지 않았습니다"라는 것이 아니라면 매우 놀랄 것입니다. PDO를 사용하고'prepare()'를 호출하는 모든 문제를 해결하려면 준비된 구문을 매개 변수화 된 쿼리로 사용해야합니다. – DaveRandom

+0

음, 여기에 실수가있는 것 같아요.'어디서 이메일 = 이름'? –

답변

1

당신은 당신이 실제로 쿼리를 실행하기 전에 행을 가져올 수 없습니다) (

try { 
$db = new PDO($dbhost, $dbuser, $dbpassword); 
$statement = $db->prepare("select first, last from users where email = ?"); 
$statement->execute(array($name)); 
$result = $statement->fetch(); 
$first = $result[first]; 
$last = $result[last];} 

catch(PDOException $e) {echo $e->getMessage();} 
+0

$ 문장의 끝 부분에 세미콜론을 잊어 버렸지 만 이것은 효과적입니다. 도와 주셔서 대단히 감사합니다! –

+0

@ Mittens FIXED. – bugwheels94

0

을 실행 사용해야합니다; 당신은 오직 질의 만 준비했습니다. 궁극적 인 문제는 $statement->execute() 전화가 부재 한 것입니다.

$statement = $db->prepare("select first, last from users where email = ?"); 
if (!$statement->execute(array($name))) { 
    // Handle error 
} 
$result = $statement->fetch(); 
$statement->closeCursor(); 

당신이 행을 페치 완료하는 closeCursor() 전화를 잊지 마세요 : 적절한 PDO 관용구는이 같은 것입니다. 동일한 클라이언트가 동시 쿼리를 지원하지 않는 일부 데이터베이스 시스템에서는이 함수를 호출하지 않으면 다음 쿼리가 실행되지 않을 수 있습니다.

관련 문제