2010-06-30 5 views
0

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

Фатальная ошибка: Разрешены памяти размером 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, так что не понимает его полностью, то я ничего не вытаскивать из базы данных

Надежда знает, что я делаю неправильно или могу поступить иначе.

Заранее спасибо

+1

Не могли бы вы указать, в какой строке происходит ошибка. –

ответ

0

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

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

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

+0

Я изменяю longtext на mediumtext, и теперь он работает: D! БЛАГОДАРЯ!. – Simon

3

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

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

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

+0

+1 ... Я бы сказал, что точное количество 4 ГБ похоже на то, что он наносит какой-то физический предел, может быть, создавая буфер или что-то в этом роде. –

+0

это то, что я извлекаю из базы данных http: // pastebin.ком/Q0Ep0yGM Это мои новости сценарий http://pastebin.com/t3gPknXF я закомментируйте все включают так его только 1 запрос и при этом Это моя ошибка, я получаю Фатальная ошибка: разрешены памяти размером 536870912 байт исчерпаны (пытались выделить 4294967296 байт) в /home/public_html/test/nyheder.php на линии 16 на линии 16 это: $ stmt-> bind_result ($ ID , $ billed_sti, $ overskrift, $ indhold, $ brugernavn, $ dato); Я помогу вам помочь! – Simon

+0

Вы должны вызвать 'bind_result' после' execute', а не раньше ... http://php.net/manual/en/mysqli-stmt.bind-result.php – ircmaxell

3

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

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

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

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

5

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

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

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