PHP PDO检查数据是否存在不正常

时间:2016-06-03 09:57:29

标签: php mysql database pdo

我在我的博客上工作,我似乎无法解决这个问题。 if ($result->fetchColumn())应该正常工作。它确实给出了错误但是当数据(行)存在时它没有显示任何内容。有什么问题?

    <?php
        $id = $_GET["id"];
        $sql = "SELECT * FROM `posts` WHERE `id` = $id";
        $result = $conn->query($sql);
        if ($result->fetchColumn() > 0) {
        while($row = $result->fetch(PDO::FETCH_ASSOC)) {
            echo '<div class="post-preview">
                    <a>
                        <h2 class="post-title">
                            '.$row["title"].'
                        </h2>
                        <h3 class="post-subtitle">
                            '.$row["content"].'
                        </h3>
                    </a>
                    <p class="post-meta"><a href="#">'.$row["creator"].'</a> | '.$row["date"].'</p>
                </div>
                <hr>';
            }
        }
        else {
            echo "<center><h1>Post does not exist.</h1></center>";
            header("Refresh: 2; url=index.php");
        }
    ?>

每当我删除行if ($result->fetchColumn() > 0) {时,它都能正常工作。但我需要检查数据库中是否存在$ id。如果是,它应该显示数据,如果没有,它应该显示错误并链接回index.php。

1 个答案:

答案 0 :(得分:1)

您的代码可能更简单

只需填充$ row变量,看看它是否包含任何内容。

<?php
$stmt = $conn->prepare("SELECT * FROM `posts` WHERE `id` = ?");
$stmt->execute([$_GET["id"]]); // essential to protect from SQL injection!
$row = $stmt->fetch(PDO::FETCH_ASSOC)
if ($row) {
        echo '<div class="post-preview">
                <a>
                    <h2 class="post-title">
                        '.$row["title"].'
                    </h2>
                    <h3 class="post-subtitle">
                        '.$row["content"].'
                    </h3>
                </a>
                <p class="post-meta"><a href="#">'.$row["creator"].'</a> | '.$row["date"].'</p>
            </div>
            <hr>';
    }
    else {
        echo "<center><h1>Post does not exist.</h1></center>";
        header("Refresh: 2; url=index.php");
    }