2012-01-08 139 views
1

出于某种原因,它执行语句,然后bind_results返回所有值,但不是$ postContent的最后一个值。bind_result()没有得到所有结果

<?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 
      } 
     ?> 

回答

1

这是假设您在数据库源表实际上是$postContent提供一列,当你做SELECT *

查看HTML源代码是输出由你的PHP脚本,看是否$postContent实际上是出现在源代码中,但不在屏幕上。你还没有逃过HTML的数据库输出(编码为<,如&lt;等),因此$postContent或更早的变量中的某些内容可能会破坏你的输出。在HTML中打印每个变量时,不要直接回显这些变量,而应将其包装在htmlspecialchars()中。

<?php echo htmlspecialchars($postTitle); ?> 
<?php echo htmlspecialchars($postUser); ?> 
<?php echo htmlspecialchars($postDateTime); ?> 
<?php echo htmlspecialchars($postCat); ?> 
<?php echo htmlspecialchars($postContent); ?> 
+0

数据库确实为postContent提供了列,并且它与bind_results显示的顺序相同。我已经尝试了你的建议,并且它没有在HTML页面的源代码中显示postContent。此外,htmlspcialchars()也没有工作,但因为我打算有HTML标签,例如
我将继续使用它。你是一个很好的帮助 – 2012-01-08 20:18:07

+0

还有什么想法? – 2012-01-09 22:36:00

+0

@ user1136076我可以建议的另一件事是'var_dump($ postContent)'和其他变量的_all_以确定它们每个都包含预期的内容 – 2012-01-10 14:40:43

2

MySQLi无法为LONGTEXT对象(〜4Gb)的最大大小分配足够的内存。

这是一个已知的bug:https://bugs.php.net/bug.php?id=51386

解决方法是将LONGTEXT列转换为MEDIUMTEXT或更小的其他东西,或考虑使用替代数据库或接口类。

+0

感谢这一点,这是世界上最棘手的问题谷歌。 – tj111 2013-10-03 20:50:41