2012-03-08 48 views
0

我做了一個博客。除了一件事以外,一切工作都正常;能夠比較我的id以打開相應的文章。PDO獲取值

我使用FETCH_ASSOC

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

我檢查$_GET一個id

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

如果屬實,這顯示了整個博客文章。否則它會顯示所有的博客引子:

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

我如何可以訪問idif聲明?如果我是這樣的:通過重新排序的職位

$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 2012-03-08 00:35:01

+0

@JamWaffles - 上面添加的查詢。謝謝 – 2012-03-08 00:36:15

回答

3

您使用PDO和MySQL稍微錯在這裏。而是讓所有的博客文章和檢查,看看你有一個是否具有正確的ID,你應該只從數據庫中使用WHERE條款,這樣得到一個博客文章(行):

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 

在這裏,我已經使用了佔位符:theBlogID將由$_GET參數替換。

使用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 
    } 
} 

目前尚不清楚您目前有多少上述內容,因爲您只是在這裏或那裏給出一兩行代碼片段,但這應該能夠很好地勾畫出您需要執行的操作。

+0

所以,我有點困惑。如果我理解這個權利,你的代碼將檢查是否設置了'id',如果是,它將運行一個'foreach'循環。那是對的嗎?然後'foreach'將返回所有匹配'id'的行。從那裏我應該可以通過使用'echo $ row ['date']'正確嗎? – 2012-03-08 00:59:31

+0

如果'if'語句返回'false',我會添加一個'else'語句並運行我上面顯示的所有代碼? – 2012-03-08 01:00:20

+0

Correctomundo。如果你想添加「沒有帖子!」消息是的,你只需要在現有的'if()'末尾添加一個'else'。 – Bojangles 2012-03-08 01:00:30