由于某种原因,它执行语句,然后bind_results返回所有值,但不返回$ postContent的最后一个值。
<?php
if (isset($_GET['postID']))
{
$postID = $_GET['postID'];
$stmt = $mysqli->prepare("SELECT * FROM Posts WHERE postID = ?");
$stmt->bind_param('i', $postID);
$stmt->execute();
$stmt->bind_result($postID, $postTitle, $postCat, $postUser, $postDateTime, $postContent);
$stmt->fetch();
echo $postContent;
?>
<h1><?php echo $postTitle;?></h1>
</div> <!-- End of box div -->
<div class="blogroll"> <!-- Start of blogroll div -->
<div class="top"></div> <!-- Start and end of top div -->
<div class="post"> <!-- Start of post div -->
<div class="post_date">Posted by <?php echo $postUser;?> on <?php echo $postDateTime ?> Category : <?php echo $postCat;?></div> <!-- Start and end of post_date div -->
<div class="post_text"> <!-- Start of post_text div -->
<?php echo $postContent;?>
</div> <!-- End of post_text div -->
<?php
}
?>
答案 0 :(得分:2)
MySQLi无法为LONGTEXT对象的最大大小(~4,4b)分配足够的内存。
这是一个已知错误:https://bugs.php.net/bug.php?id=51386。
解决方法是将LONGTEXT列转换为MEDIUMTEXT或其他更小的列,或考虑使用备用数据库或接口类。
答案 1 :(得分:1)
这假设您执行$postContent
时数据库中的源表实际上为SELECT *
提供了一列:
查看PHP脚本输出的HTML源代码,以查看$postContent
是否实际出现在源代码中但未显示在屏幕上。您尚未转义HTML的数据库输出(将<
编码为<
等等),因此$postContent
或早期变量中的某些内容可能会破坏您的输出。而不是直接回显这些变量,在HTML中打印它们时将每个变量包装在htmlspecialchars()
中。
<?php echo htmlspecialchars($postTitle); ?>
<?php echo htmlspecialchars($postUser); ?>
<?php echo htmlspecialchars($postDateTime); ?>
<?php echo htmlspecialchars($postCat); ?>
<?php echo htmlspecialchars($postContent); ?>