PHP-Hispano.net Comunidad hispana de desarrollo web

Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?

21 usuarios Online (0)

Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / Distinct = Fatal error: Allowed memory size...

Distinct = Fatal error: Allowed memory size... [SOLUCIONADO]

3 respuestas 541 visitas Categoría MySQL

Distinct = Fatal error: Allowed memory size...

Avatar de tigerzack
* * * * * * *

(Nivel 2 - 71 posts)

#0 Offline tigerzack Usuario 03 ago 09
Buenas:

Necesito obtener los valores (sin repetirlos) de un campo determinado para cargarlos dentro de <option> que rellenará otra tabla.
Lo he intentado con los dos "$sql_tit_concepto" que aparecen comentados.


$contenido .='<td class="td_ad_form"><select name="tit_padre">';
        # obtiene los valores permitidos para "titulo_padre"
        # $sql_tit_concepto="SELECT DISTINCT concepto FROM danielpastor01.titulo ORDER BY id_titulo DESC;";
        # $sql_tit_concepto="SELECT * FROM danielpastor01.titulo GROUP BY concepto;";
        $opt_query=mysql_query($sql_tit_concepto, $conexion);
        $opt=mysql_fetch_array($opt_query);
        $options="";
        while ($opt_query)
        {
            $options .='<option value="'.$opt['concepto'].'">'.$opt['concepto'].'</option>';
        }
        $contenido .= $options;
    $contenido .='</select></td>';



El error que me devuelve el servidor es:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33292301 bytes) in C:xampphtdocsdanielpastorpaginasareasadmincap_worker.php on line 68 // La línea 68 es la que está dentro del while

¿Qué me podéis decir aparte de que me busque más RAM?? xD

PeHachePeando...

SOLUCIÓN PuntuaciónPuntuaciónPuntuaciónRe: Distinct = Fatal error: Allowed memory size...

Avatar de osmodiars
* * * * * * *

(Nivel 2 - 162 posts)

#1 Offline osmodiars Usuario 03 ago 09
Para agregarle mas memoria tienes que ir al archivo php.ini y buscar la linea y agregarle estos valores (o mas)

memory_limit = 64M ; Maximum amount of memory a script may consume (16MB)

Igual, el problema no es ese, el "while" que haces en la linea 68 es infinito y te va ocupando recursos hasta que te ocupa toda la ram.

prueba de esta forma:


<?php

$contenido 
.='<td class="td_ad_form"><select name="tit_padre">';
        
# obtiene los valores permitidos para "titulo_padre"
        # $sql_tit_concepto="SELECT DISTINCT concepto FROM danielpastor01.titulo ORDER BY id_titulo DESC;";
        # $sql_tit_concepto="SELECT * FROM danielpastor01.titulo GROUP BY concepto;";
        
$opt_query=mysql_query($sql_tit_concepto$conexion);
        
$options="";
        while ( 
$opt=mysql_fetch_array($opt_query))
        {
            
$options .='<option value="'.$opt['concepto'].'">'.$opt['concepto'].'</option>';
        }
        
$contenido .= $options;
    
$contenido .='</select></td>';

?>



Espero que te sirva, saludos.

Re: Distinct = Fatal error: Allowed memory size...

Avatar de tigerzack
* * * * * * *

(Nivel 2 - 71 posts)

#2 Offline tigerzack Usuario 04 ago 09
Perfecto!!

Yo ya estaba desvariando con:

$n=mysql_affected_rows();
#for ($i = 0 ; $i < $n ; $i++)


Y sólo me repetia el primer valor detectado aunque las affected rows eran correctas.

Te lo agradezco osmodiars ;)

PeHachePeando...

Re: Distinct = Fatal error: Allowed memory size...

Avatar de tigerzack
* * * * * * *

(Nivel 2 - 71 posts)

#3 Offline tigerzack Usuario 04 ago 09
Por si sirve de algo a alguien, posteo el mecanismo php-mysql que comprueba que no existan "capitulos_hijos" dentro de un título para posibilitar la eliminación de dicho título.

# captura de nombre para informar mediante alert y comprobar hijos
        $catch="SELECT * FROM $table WHERE id_titulo LIKE '$id' LIMIT 1;";
        $catching=mysql_query($catch,$conexion);
        $res=mysql_fetch_assoc($catching);
        $co=$res['concepto'];
        # comprueba que el titulo no posea capitulos hijos
        $cap_sql="SELECT * FROM danielpastor01.capitulo;";
        $cap_query=mysql_query($cap_sql, $conexion);
        $n=mysql_num_rows($cap_query);
        for ($i=0; $i<=$n; $i++)
        {
            $res=mysql_fetch_array($cap_query);
            if($res['titulo_padre']==$co)
            {
                echo "$scr alert('Imposible borrar: Contiene capitulos') $escr";
                mysql_close($conexion);
                echo "$scr window.location='tit_listing.php' $escr";
            }
        }
        # crea tarea de borrado de entidad
        $sql="DELETE FROM $table WHERE id_titulo LIKE '$id' LIMIT 1;";

PeHachePeando...

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

php-hispano.net 2002 - 2010 | XHTML 1.0
Datos Legales | Webmaster