2012-03-08 2 views
0

블로그를 만들었습니다. 한 가지를 제외하고 모든 것이 올바르게 작동합니다. 적절한 기사를 열려면 내 id을 비교할 수 있어야합니다. 내가 FETCH_ASSOC을 사용하고값을 얻는 PDO

:

$sth->setFetchMode(PDO::FETCH_ASSOC); 

가 나는 id에 대한 $_GET을 확인하고 있습니다 :

if (isset($_GET['id']) && ($_GET['id'] == $blogid['id'])) { **PROBLEM IS WITH $blogid 
$row = $sth->fetch() 
//... Code to display html and db values 

true의 경우, 그것은 전체 블로그 게시물을 보여줍니다. 그렇지 않으면 모든 블로그 인트로를 표시합니다

<?php } else { ?> 
<?php while($row = $sth->fetch()) { ?> 
//... Code to display html and db values 

어떻게 액세스 할 수 있습니다 내 if 문에서 id? 내가 좋아하는 뭔가를 할 경우 게시물을 재정렬에 의해 $row = $sth->fetch()

$blogid = $sth->fetch() 

그 나사를

편집 쿼리 추가 :

$sth = $dbh->query('SELECT id, title, slug, body, image, author, date, category from blog ORDER BY date DESC'); 
+3

검색어를 입력 해주세요. 블로그 ID가'$ _GET'의 블로그 ID와 동일한 지 확인하는 대신 WHERE 절을 사용하여 쿼리에 조건을 전달해야합니다. – Bojangles

+0

@JamWaffles - 위에 쿼리가 추가되었습니다. 감사합니다 –

답변

3

는 현재 PDO와 MySQL 약간 잘못 사용하고 있습니다. 대신 모든 블로그 게시물을 받고 당신이있어 사람이 올바른 ID를 가지고 있는지 여부를 확인, 당신은이처럼 WHERE 절을 사용하여 DB에서 하나 블로그 게시물 (행)를 얻어야한다 :

SELECT id, title, ... FROM blog 
WHERE id=[ID from $_GET] 
ORDER BY date DESC 

PDO는 자리를 사용할 수 있도록하여 환상적으로 잘 당신을 위해 이것을 처리합니다

SELECT id, title, ... FROM blog 
WHERE id=:theBlogID 
ORDER BY date DESC 

을 여기에, 나는 $_GET 매개 변수로 대체 될 자리 :theBlogID을 사용했습니다.

$sth = $dbh->prepare('SELECT id, title, ... FROM blog 
         WHERE id=:theBlogID 
         ORDER BY date DESC'); 

$sth->bindParam(':theBlogID', $_GET['id'], PDO::PARAM_INT); // Bind the ID from $_GET to the placeholder 

$result = $sth->execute(); // Execute (run) the query 

if($result->rowCount()) { // Have we found any blog posts with the ID specified? 
    $data = $result->fetchAll(); 

    foreach($data as $post) { 
     // Print out your blog post 
    } 
} 
: PDO를 사용

는 최종 코드는 다음과 같이 (실제로 PDO::rowCount()를 사용하여 결과가 있는지 확인) 결과를 얻을 후, 쿼리를 준비 그것을 매개 변수를 바인딩, 그것을 실행하고 필요

여기 저기에 하나 또는 두 개의 코드 조각 만 제공하기 때문에 현재 위의 코드가 어느 정도 있는지는 분명하지 않지만 필요한 사항에 대한 개요를 제공해야합니다.

+0

그래서, 조금 혼란 스러워요. 이 권리를 이해한다면, 당신의 코드는'id'가 설정되어 있는지 검사 할 것이고, 그렇다면'foreach' 루프를 실행할 것입니다. 그 맞습니까? 'foreach'는'id'와 일치하는 모든 행을 반환합니다. 거기에서'echo $ row [ 'date']'correct를 사용하여 모든 것을 액세스 할 수 있어야합니까? –

+0

'if' 문이'false'를 반환하면'else' 문을 추가하고 위 코드를 실행하여 모든 것을 표시합니까? –

+0

수정. '소식 없음'을 추가하려면 message then then, 기존의'if()'의 끝에'else'를 추가하기 만하면됩니다. – Bojangles