帖子没有在PHP中显示

时间:2014-07-07 15:14:16

标签: php mysqli prepared-statement blogs

我已经被困在这两天了。我已经建立了自己的博客,帖子存储在数据库中。此页面用于根据它的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()从不显示错误。我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

<强>功能

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()是正确的做法。

答案 1 :(得分:0)

好吧,我找到了解决办法。我需要在$stmt->store_result()之前运行$stmt->bind_result()因为身体是LONGTEXT,我想这是MySQL和PHP的一些问题。