PDO foreach不显示正在获取的数据

时间:2013-12-26 07:38:09

标签: php mysql pdo

所以我这里有一个博客系统。

我的问题是,当我尝试从数据库中提取数据时,它没有显示。这是我目前的代码,谢谢!

的index.php

<h1>News Blog</h1>
<form action="blog.php" method="POST">
    username: <input type="name" name="name" placeholder="name"><br />
    <textarea name="body" rows="10" cols="70"></textarea><br/>
    <input type='submit' name='submit' value='Post' />
</form>

<?php
    if(isset($_POST['name'], $_POST['body'])){
    require'core/connect.php';

    $query = dbConnect()->prepare("SELECT name, body FROM blog WHERE name =:name AND body = :body");
    $query->bindParam(1, $_POST['name']);
    $query->bindParam(2, $_POST['body']);

    foreach($query-> fetchAll(PDO::FETCH_ASSOC) as $row){
        echo $row['name'], '<br/><hr>';
        echo $row['body'];
    }
}
?>

这是我的blog.php,如果必要的话

<?php
    if(isset($_POST['name'], $_POST['body'])){
        require'core/connect.php';

        $query = dbConnect()->prepare("INSERT INTO blog (name, body) VALUES (?,?)");
        $query->bindParam(1, $_POST['name']);
        $query->bindParam(2, $_POST['body']);

        if($query->execute()){
            echo 'Thank you for posting! Click <a href="index.php">here</a> to go back.';
        } else{
            echo 'There has been an error';
        }
    }
?>

2 个答案:

答案 0 :(得分:0)

你必须在fetch之前执行你的语句,对于列表页面,你不必在你的sql中添加where部分。 index.php没有数据发布。

只需更改为:

<?php
    require'core/connect.php';

    $query = dbConnect()->prepare("SELECT name, body FROM blog");
    $query->execute();

    foreach($query->fetchAll(PDO::FETCH_ASSOC) as $row){
        echo $row['name'], '<br/><hr>';
        echo $row['body'];
    }
?>

答案 1 :(得分:0)

您需要先修复parameter binding。您在查询中使用了named placeholders,但在1-indexed来电中使用了bindParam个参数。然后你还需要执行查询:

$query = dbConnect()->prepare("SELECT name, body FROM blog WHERE name =:name AND body = :body");
$query->bindParam(':name', $_POST['name']);
$query->bindParam(':body', $_POST['body']);

$query->execute(); 

foreach($query->fetchAll(PDO::FETCH_ASSOC) as $row){
    echo $row['name'], '<br/><hr>';
    echo $row['body'];
}