Допустимая ошибка размера памяти - PullRequest
0 голосов
/ 30 июня 2010

Я запрограммировал одну руку и бросил ее на сервер моего хоста, но получил ошибку здесь

Неустранимая ошибка: допустимый объем памяти 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 ]

5 голосов
/ 01 апреля 2012

Даже если это старое, для дальнейшего использования:

Всегда звоните mysqli->store_result(), прежде чем звонить mysqli->bind_result().

Затем PHP знает, сколько данных будет получено, и выделяет только столько памяти, чем выделяет максимум того, что может быть возможно. Это будет 4 ГБ с LONGTEXT, LONGBLOB.

3 голосов
/ 30 июня 2010

Ну, из этого сообщения об ошибке он пытается сделать одно выделение ровно 4 ГБ. Насколько велик набор записей, который вы извлекаете из MySQL?

Что мне кажется странным, так это то, что объем выделенных ресурсов составляет ровно 4 ГБ. Так что, если у вас нет точного размера результата (или файла) базы данных, что-то еще звучит подозрительно. Я имею в виду, каковы шансы, что он выделит этот ТОЧНЫЙ объем данных.

Вы, вероятно, должны опубликовать весь свой код, сообщение об ошибке EXACT и информацию о наборе данных, возвращенных из этого запроса ...

3 голосов
/ 30 июня 2010

Является ли один из ваших столбцов LONGBLOB или LONGTEXT?

PHP пытается выделить достаточно памяти для хранения максимального размера этого столбца (4 294 967 296 байт). Смотрите здесь (обратите внимание на последнее сообщение на странице):

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

Если это так, измените столбец на MEDIUMTEXT или MEDIUMBLOB, или что-то меньшее, если вам это сойдет с рук.

0 голосов
/ 30 июня 2010

Единственное, что я могу догадаться, это то, что у вас есть очень большие значения в вашем поле indhold.Может ли это быть так?Если это так, похоже, что вы показываете только 700 символов, поэтому вы можете захотеть получить только эти символы в запросе, а не получать их все и только отображать некоторые из них.

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

Вы также не появляютсячтобы использовать переменные $ brugernavn и $ dato, поэтому удалите их из вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...