【问题标题】:Posts Aren't Showing in PHP帖子未在 PHP 中显示
【发布时间】:2014-07-07 15:14:16
【问题描述】:

我已经坚持了两天了。我建立了自己的博客,帖子存储在数据库中。此页面用于根据其 ID 抓取旧帖子。当我试图找回它们时,除了实际的身体外,一切都显示出来了。

这是 /posts/ 中的索引

<?php
include_once('grabPost.php');
$TEMPLATE_TITLE = "$POST_TITLE";
include_once("../inc/template.html");
?>

然后,这是grabPost.php。

<?php
error_reporting(-1);
$ID = $_GET['id'];
include_once('connectionMod.php');
$DBConnection = new MySQLi($DB_HOST, $DB_USER, $DB_PASS, $DB_DTBS);
function ReturnError($error){
    global $POST_TITLE;
    global $POST_BODY;
    global $TEMPLATE_CONTENT;
    $POST_TITLE="Oops!";
    $POST_BODY="<p>It looks like we had an error grabbing your post. The post may have been moved, deleted, or you may have an invalid link. If you <strong>know</strong> this shouldn't be happening, please contact a developer.<br><em>$error</em></p>";
    $TEMPLATE_CONTENT = "<h1>$POST_TITLE</h1>\n<hr size='2'>\n$POST_BODY";
}
if($ID == null){
    ReturnError("No post ID was provided.");
}
if($stmt = $DBConnection->prepare("SELECT `Title`, `Poster`, `Date`, `Body` FROM `posts` WHERE `ID`=?")){
    if(!($stmt->bind_param('i', $ID))){
        ReturnError($stmt->error);
    }
    else if(!($stmt->execute())){
        ReturnError($stmt->error);
    }
    else if(!($stmt->bind_result($POST_TITLE, $POST_NAME, $POST_DATE, $POST_BODY))){
        ReturnError($stmt->error);
    }
    else if(!($stmt->fetch())){
        ReturnError($stmt->error);
    }
    else{
        $TEMPLATE_CONTENT = "<h1>$POST_TITLE</h1>\n<small>Posted on $POST_DATE by $POST_NAME</small>\n<hr size='2'>\n$POST_BODY";
    }
}
else{
    ReturnError($DBConnection->error);
}
?>

但奇怪的是,您可以在主页上毫无问题地看到最新的帖子。有什么问题有什么建议吗? 此外, ReturnError() 永远不会显示错误。我该怎么办?

【问题讨论】:

  • pur error_reporting(E_ALL); 检查是否有任何错误
  • 我已经有了-1,但没有区别。没有出现任何错误。
  • 如果没有 return 或 echo 语句,您希望 ReturnError() 做什么...?
  • $POST_BODY 包含错误。如果失败,仍然会显示一个网页,上面写着“糟糕!”并应与错误一起提供信息。当我确实 die() 时它起作用了,但我显然不希望那样。

标签: php mysqli prepared-statement blogs


【解决方案1】:

功能

function return_error($error){
$post_error = "<h1>Oops!</h1>\n<hr size='2'><br />"
              ."<p>It looks like we had an error grabbing your post."
              ."The post may have been moved, deleted, or you may have an invalid link."
              ."If you <strong>know</strong> this shouldn't be happening, "
              ."please contact a developer.<br><em>".$error."</em></p>";

return $post_error;
}

用法:

/* check connection */
if ($DBConnection->connect_errno) {
    $error = return_error("Connect failed: %s\n", $DBConnection->connect_error);
    echo $error;
    die();
}

/* check prepare() */
$stmt = $DBConnection->prepare("SELECT ....FROM `posts` WHERE `ID`=?");
if(!$stmt){
    $error = return_error("prepare failed()".$stmt->error);
    echo $error;
    die();
}

等等...顺便说一句,如果连接失败或发生任何其他致命错误,那么die() 或exit() 是正确的做法..

【讨论】:

  • 这个错误只是为我调试,但仍然不能解决我的主体不显示的主要问题。
  • Meda 我也更新了,让自己更清楚。错误非常有效,但正文仍然空白的问题对我来说是一个很大的问题。
【解决方案2】:

嗯,我找到了解决办法。我需要在$stmt-&gt;bind_result() 之前运行$stmt-&gt;store_result(),因为由于正文是LONGTEXT,我猜这是MySQL 和PHP 的一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2013-07-18
    • 2021-05-05
    相关资源
    最近更新 更多