【问题标题】:Allowed memory size error允许的内存大小错误
【发布时间】:2010-06-30 17:15:17
【问题描述】:

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

致命错误:允许的内存大小为 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中没有从数据库中提取,所以不完全理解,我从数据库中提取的不是什么

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

提前致谢

【问题讨论】:

  • 能否指出错误发生在哪一行。

标签: php memory mysqli


【解决方案1】:

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

在拨打mysqli-&gt;bind_result()之前,请始终拨打mysqli-&gt;store_result()

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

【讨论】:

    【解决方案2】:

    嗯,从那条错误消息来看,它正试图进行 4gb 的单次分配。您从 MySQL 中提取的记录集有多大?

    让我觉得奇怪的是,分配量正好是 4 GB。因此,除非您有一个精确大小的数据库结果(或文件),否则其他东西听起来很可疑。我的意思是它分配确切数量的数据的可能性有多大。

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

    【讨论】:

    • +1... 我会说确切的 4GB 数量听起来像是他达到了某种物理限制,可能是在创建缓冲区或其他东西时。
    • 这是我从数据库中提取的 pastebin.com/Q0Ep0yGM 这是我的新闻脚本 pastebin.com/t3gPknXF 我已将所有包含注释掉,因此它只有 1 个查询,在执行此操作时这是我的错误,我收到致命错误:在第 16 行的第 16 行的 /home/public_html/test/nyheder.php 中允许的内存大小为 536870912 字节(试图分配 4294967296 字节)是这样的: $stmt->bind_result($id, $billed_sti, $overskrift, $indhold, $brugernavn, $dato);我帮你可以帮你!
    • 你应该在execute之后调用bind_result,而不是之前...php.net/manual/en/mysqli-stmt.bind-result.php
    【解决方案3】:

    您的某一列是 LONGBLOB 还是 LONGTEXT?

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

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

    如果是这种情况,请将列更改为 MEDIUMTEXTMEDIUMBLOB,或者如果您可以侥幸的话,可以更小一些。

    【讨论】:

      【解决方案4】:

      我唯一能猜到的是您的 indhold 字段中有一些非常大的值。会是这样吗?如果是这样,您似乎只显示了 700 个字符,因此您可能只想在查询中获取这些字符,而不是全部获取它们并只显示一些。

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

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

      【讨论】:

      • 我将长文本更改为中文本,现在它可以工作了:D!谢谢!。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2023-03-20
      • 2015-09-18
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      相关资源
      最近更新 更多