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