2012-03-08 11 views
0

私はブログを作った。 1つのことを除いてすべてが正しく機能しています。適切な記事を開くために私の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にアクセスするにはどうすればよいですか?私のような何かを行う場合は、次の記事を並べ替えることにより、アップ​​

$blogid = $sth->fetch() 

それネジを

EDITクエリが追加さ:

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

あなたの質問を表示してください。ブログIDが '$ _GET'のものと同じであるかどうかを調べるのではなく、' 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を使用しました。 PDOを使用して

、あなたの最終的なコードは、クエリを作成し、それにパラメータをバインドし、それを実行し、その結果を取得する必要があります(実際にPDO::rowCount()を使用して結果があるかどうかをチェックする)このような何か:

$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 
    } 
} 

ここで何点かの1つか2つのラインスニペットしか与えられないので、あなたが現在持っているものはどれくらいあるのかははっきりしませんが、これはあなたが何をする必要があるのか​​についての良い概要を与えるはずです。

+0

私は少し混乱しています。私がこの権利を理解していれば、あなたのコードは 'id'がセットされているかどうかをチェックし、そうであれば' foreach'ループを実行します。あれは正しいですか? 'foreach'は' id'と一致するすべての行を返します。そこから 'echo $ row ['date']'正しいものを使ってすべてにアクセスできるはずですか? –

+0

'if'ステートメントが' false'を返す場合は、 'else'ステートメントを追加し、上記のすべてのコードを実行しますか? –

+0

Correctomundo。 「投稿なし」を追加する場合は、メッセージが表示されたら、既存の 'if()'の最後に 'else'を追加するだけです。 – Bojangles

関連する問題