允许的内存大小错误

时间:2010-06-30 17:15:18

标签: php memory mysqli

我已经编程了一只手并将其扔在我主机的服务器上但是在这里得到了错误

致命错误:允许的内存大小为536870912字节耗尽(尝试分配4294967296字节)

这是我的代码

<?php
require 'opsatning/top.php';
?>
<!--[if IE]>
<style>
.arrow { top: 100%; };
</style>

<![endif]-->
<div id="content_indhold">
<?php
        $mysql = connect();
        $stmt = $mysql->prepare("SELECT id,billed_sti,overskrift,indhold,brugernavn,dato FROM nyheder ORDER BY id DESC LIMIT 3");
        $stmt->bind_result($id, $billed_sti, $overskrift, $indhold, $brugernavn, $dato);
        $stmt->execute();


        while($stmt->fetch()) {


?>


<div class="nyhederRamme2">

<h1><a href="vis.nyheder.php?id=<?php echo $id; ?>"><?php echo $overskrift; ?></a><span class="arrow"></span></h1>
<br />


        <a href="vis.nyheder.php?id=<?php echo $id; ?>"><img style="float:left; margin-right:5px;" src="images/nyheder/<?php echo $billed_sti; ?>" /></a>


    <a href="vis.nyheder.php?id=<?php echo $id; ?>"><?php echo substr($indhold,0,700); ?></a>


</div><!-- ramme -->


<?php
}#Lukker while
?>
</div><!-- content_indhold -->
<?php
#require 'opsatning/bund.php';
?>

我的top.php中没有从数据库中提取,所以不完全理解它,我没有从数据库中取出

希望知道我做错了什么或者能以不同的方式做什么。

提前致谢

4 个答案:

答案 0 :(得分:5)

即使这是旧的,以备将来参考:

在致电mysqli->store_result()之前,请务必致电mysqli->bind_result()

PHP然后知道将接收多少数据并且仅分配那么多内存而不是分配可能的最大值。这将是LONGTEXT,LONGBLOB的4 GB。

答案 1 :(得分:3)

好吧,根据该错误消息,它正在尝试单独分配4gb。你从MySQL中提取的记录集有多大?

对我来说似乎很奇怪的是,分配金额是4 GB。因此,除非你有一个确切大小的数据库结果(或文件),否则其他东西听起来很可疑。我的意思是它分配大量数据的可能性是多少。

您可能应该发布整个代码,EXACT错误消息以及有关从该查询返回的数据集的信息......

答案 2 :(得分:3)

您的列之一是LONGBLOB还是LONGTEXT?

PHP尝试分配足够的内存来保存该列的最大大小(4,294,967,296字节)。请看这里(注意页面上的最后一篇文章):

http://bugs.php.net/bug.php?id=51386

如果是这种情况,请将列更改为MEDIUMTEXTMEDIUMBLOB,或者更小的内容,如果您可以使用它。

答案 3 :(得分:0)

我唯一可以猜到的是你在indhold字段中有一些非常大的值。可能是这样吗?如果是这样,看起来你只显示700个字符,所以你可能只希望在查询中获取这些字符,而不是全部获取它们而只显示一些字符。

SELECT id,billed_sti,overskrift, SUBSTRING(indhold, 0, 700), brugernavn,dato FROM nyheder ORDER BY id DESC LIMIT 3

您似乎也没有使用$ brugernavn和$ dato变量,因此请从查询中删除它们。