如果没有从 PDO Fetch() 请求返回的记录,则无法回显字符串

Cannot Echo Out String If No Records Returned From PDO Fetch() Request

我有一个从 MySQL 数据库中获取记录的 PDO 语句,如果没有返回任何记录(即用户尚未添加任何帖子),我想将一些文本回显到页面。

我想在 while 循环之后我可以做一个 if 语句来确认行的存在。这确实回显了字符串,但它在显示帖子时也回显了字符串?

<?php

    isset($_GET['username']) ? $username = $_GET['username'] : header("Location: login.php");

    $stmt = $connection->prepare("SELECT * FROM posts WHERE username = :username");
    $stmt->execute([':username' => $username]);                        

    while ($row = $stmt->fetch()) {

        $db_post_id = htmlspecialchars($row['image_id']);
        $db_title = htmlspecialchars($row['image_title']);
        $db_tags = htmlspecialchars($row['image_tags']);
        $db_processed= htmlspecialchars($row['user_processed']);
        $db_username = htmlspecialchars($row['username']);
        $db_profile_image_filename = htmlspecialchars($row['profile_image']);

        if ($db_processed === 'yes') {

?>

<article>
    <!-- HTML goes here that includes above data from database -->
</article>

<?php }

}

if ($row == 0) {
    echo "no data to show";
}

?>

您想知道是否有结果($stmt->fetch())。 如果不是,则打印某条消息。

下一行是一个循环,当条件 return 为真时运行,最终这个条件将 return 为假(所有结果已被提取)并且 $row 将为假。 但即使没有结果,fetch() 也会 return false。

while ($row = $stmt->fetch()) {

因此,检查 $row 的值并不是您请求的良好指标。 解决您的问题的方法是使用另一个布尔变量。

    $hasResults = false;
    while ($row = $stmt->fetch()) {
        $hasResults = true;

然后,稍后:

if (!$hasResults) {
    echo "no data to show";
}