2012-03-08 47 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