2012-07-02 2 views
1

다음 코드를 사용하여 get 변수에서 결과를 얻으 려하고 다른 코드를 사용했으나 효과가있었습니다 만 이스케이프 할 방법이 없습니다. 그것을 사용하는 동안, 나는 잘못한 것을 모르지만 도움이 필요하다. 나는 PDO를 시작했다. 그래서 나는 바보이다. 그러나 나는 배우기를 원한다.PDO, 이스케이프를 사용하여 PDO를 사용하여 내용을 가져오고 반향 출력

if (isset($_GET['id'])) { 
    $id = $_GET['id']; 
    $q = "SELECT * FROM users WHERE id=:id"; 
    $query = $odb->prepare($q); 
    $results = $query->execute(array(
     ":id" => $id 
    )); 
    if($result-> rowCount()>0) { 
     foreach($result as $item) { 
      echo $item['user']; 
     } 
    } 
} 

일을하지만 탈출하지 않았다 코드 : 그것은 바보 같은 질문은 제가 거의 13 오전하지 않고 내가 어떤 질문을 생각하지 않는 경우,

$id = $_GET['id']; 
$query = "SELECT * FROM users WHERE id=".$id.""; 
$result = $odb->query($query); 
if($result->rowCount() > 0) { 
    foreach($result as $item) { 
     echo $item['user']; 
    } 
} 

감사 PS를 12 세 또는 13 세 어린이가 코드를 사용하여 묻는 것은 어리석은 행동으로 간주 될 수 있습니다. 내가 뭘 잘못했는지 말해줘.

감사합니다. 당신이 특히 필요한 경우가 아니라면

while (($item = $results->fetch(PDO::FETCH_ASSOC)) !== FALSE) { 
    echo $item['user']; 
} 

당신은 정말)를 rowCount (호출을 필요로하지 않습니다

+0

나는 그것을했다. 그러나 그것은 내가 필요로하는 것을 나에게주지 않는다. 혹시 코드를 편집 할 수 있습니까? – user115422

+0

그건 그렇고, 당신은 바보가 아닙니다. 이전의 (그리고 곧 사용 예정일 예정인) mysql_ 함수를 사용하지 않고 PDO를 배우는 것은 커브보다 앞서 나가는 것을 의미합니다. ;) 당신이 간신히 13이라는 사실은 인상적입니다. –

+0

큰 차이는 아니지만 어쨌든 물어 보겠습니다. 사용자 테이블의 id 열의 유형은 무엇입니까? 그것은 정수 또는 문자열입니까? 또한 id = : id에 등호 뒤에 공백을 넣으면 어떻게됩니까? 그건 중요하지 않아도되지만 인정하겠다. 너는 내게 우연히 만난다. 작동해야합니다. –

답변

0
if(isset($_GET['id'])){ 
    $id = $_GET['id']; 

    $q = "SELECT * FROM `users` WHERE `id` = :id"; 
    $query = $odb->prepare($q); 
    $query->execute(array(
     ':id' => $id 
    )); 

    if($query->rowCount() > 0){ 
     foreach($query->fetchAll() AS $item){ 
      echo $item['user']; 
     } 
    } 
} 

나는 약간의 주위를 둘러 보았고 phpfreaks에 대해 물어 보았다. 그들은 이것이 작동 할 것이라고 말했고, 시도했다. 효과가 있었다.

2

당신은 다음과 같은 (그리고 경우 {} 문을 포함하여 사이에 모든 것을) 결과 루프를 다시 작성해야 결과 집합 이전의 행 수 결과가 없으면 첫 번째 호출이 거짓을 반환하고 루프가 반복없이 전달되기 때문에 루프가 즉시 실패합니다.

EDIT (디버깅 단계) : 당신이 사용하는 경우 당신이 볼 일을

? 나는 여분의 문자 (공백 문자) 나 $ _GET [ 'id']의 문자를 리터럴로 전달할 때 합법적이라고 생각하지만 매개 변수로 전달할 때가 아니라고 생각합니다.

if (isset($_GET['id'])) { 
    $id = $_GET['id']; 
    die(var_export($id, TRUE)); 
} 
+0

입니다. '! == FALSE'는 필요 없습니다. 그리고 PDO 문은 통과 할 수 있습니다. foreach를 사용할 수 있습니다. – xdazz

+0

나는 그것이 반드시 꼭 필요한 것은 아니라는 것을 알고 있지만, 그것은 나의 작은 항문 습관 중 하나입니다. - 내가 고쳐야했던 많은 코드가 0 일 때 버그가 발생하여 고장 났기 때문에 항상 내가 원하는 값을 명시 적으로 확인했습니다. 또는 FALSE로 평가되는 빈 문자열이 반환됩니다. 그것은 결코 상처를 입지 않으며, 많은 경우에 동의하지만,이 특별한 것이 아니기 때문에, 버그를 예방합니다. –

+0

코드를 변경했는데, 내가 잘못하고있는 것을 모른다. if (isset ($ _ POST [ 'id'])) { \t \t $ id = $ _POST [ 'id']; \t \t $ q \t = "SELECT * FROM users where id = : id"; \t \t $ query = $ odb-> prepare ($ q); \t \t $ 결과 = $ 질의 -> 실행 (어레이 ( \t \t \t "ID"=> $ ID \t \t)); \t \t while ($ item = $ results-> fetch (PDO :: FETCH_ASSOC)! == 거짓) { \t \t echo $ item [ 'user']; \t \t} \t \t/* 경우 ($에서 그 결과>를 rowCount()> 0) { \t \t \t의 foreach ($ 결과 $ 아이템 등) { \t \t \t \t은 $ 항목을 [ '사용자'] 에코; \t \t \t} \t \t} */당신이 var_export ($ ID)를 삽입하면 당신이 볼 일을 \t} – user115422

관련 문제