Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/10/2012, 02:42
taboacar
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Problema al sacar por pantalla una consulta de mas de 99 elementos.

Buenas, Gracias por la contestacion, acontinuacion te pongo el codigo que lista los supuestos elementos del array.

Esta función lista los elementos:

function list_adjustments()
{
$adjustment_rows = $this->model->get_rows(array('adjustment_status'=>'pending')) ;
//print_r($adjustment_rows);
$loan_ids = array();
foreach ($adjustment_rows as $adjustment_row)
{
array_push($loan_ids,$adjustment_row['loan_id']);
}
print_r(count($loan_ids)); echo "<br>";
print_r($loan_ids); echo "<br>";
if (count($loan_ids)>0)
{
$this->load_model('loan1_model');
$data['loans'] = $this->model->get_rows(array('loan_id'=>$loan_ids));
print_r($data['loans']);
$data['fields'] = $this->model->get_result_fields();
$data['ffields'] = $this->model->get_result_ffields();

array_pop($data['ffields']);
array_unshift($data['ffields'],
'<input type="checkbox" name="check_all" id="check_all"/>'
);

array_pop($data['fields']);
array_unshift($data['fields'],
'checkbox'
);

$num_loans = count($data['loans']);
print_r($num_loans);
echo "Hola";
for ($i=0; $i<$num_loans; $i++)
{

array_pop($data['loans'][$i]);
$data['loans'][$i]['checkbox'] = '<input type="checkbox" class="adjustment_check" name="'.$data['loans'][$i]['loan_id'].'"/>';
print_r($data['loans'][$i]['checkbox']);
}

$this->load_view('loan_result_view',$data);
}
else
{
$this->load_view('loan_result_view');
}
}


La siguiente funcion es la llamada a get_rows que esta en el modelo table_model:

public function get_rows($values=NULL)
{
return $this->filter_rows($this->select($this->table,NULL,$values,'AND')->fetchAll(PDO::FETCH_ASSOC));
}

Y por pongo la funcion que realiza la consulta a la bbdd:

public function select($table, $select_fields, $where_values=NULL, $concat=NULL)
{
//print_r($where_values); echo '<br>';
if (!isset($table))
{
die('Error in Db select');
}
$query = 'SELECT';
if (isset($select_fields))
{
$query .= ' '.implode(', ',$select_fields);
}
else
{
$query .= ' *';
}
$query .= ' FROM '.$table;
if (isset($where_values) && isset($concat))
{

$keys = array_keys($where_values);
$query .= ' WHERE';
$first = TRUE;

foreach ($keys as $key)
{
// If field is a starting or ending interval, a '<' or '>' comparation is created.
$arr = explode('_',$key);
//print_r($arr); echo '<br>';
$last = $arr[count($arr)-1];

if (strcmp($last,'startinterval')==0 || strcmp($last,'endinterval')==0)
{
unset($arr[count($arr)-1]);
$field = implode('_',$arr);
//echo ('CAMPO: '.$key.'<br>');

if (strcmp($last,'startinterval')==0)
{
$op = '>=';
}
else
{
$op = '<=';
}
$condition = $field.$op.'?';
}
// If the field is a 'like' type, a LIKE comparation is created.
else if (strcmp($last,'likeleft')==0 || strcmp($last,'likeright')==0 ||
strcmp($last,'likeboth')==0)
{
unset($arr[count($arr)-1]);
$field = implode('_',$arr);
//echo ('CAMPO: '.$key.'<br>');
$op = ' LIKE ';


if (is_array($where_values[$key]))
{
$num_values = count($where_values[$key]);
for($i=0; $i<$num_values; $i++)
{
$where_values[$key][$i] = $this->replace_field_like($where_values[$key][$i], $last);
}

}
else
{
$where_values[$key] = $this->replace_field_like($where_values[$key], $last);
}
$condition = $field.$op.'?';
}
else
{
$condition = $key.'=?';
}
// Condition creation
if ($first){
$query.= ' ('.$condition;
$first = FALSE;
}
else
{
$query.= ' '.$concat.' ('.$condition;
}
if (is_array($where_values[$key]))
{
$tmp_values = $where_values[$key];
array_shift($tmp_values);
$count = count($tmp_values);
for ($i=0; $i<$count; $i++)
{
$query.= ' OR '.$condition;
}
}
$query.=' )';
}
}


Esto es lo que se encarga de seleccionar las filas y las columnas de la bbdd y pasarlas al array. Este error solo lo hemos notado en esta parte del código. En las demas secciones de la aplicación esto no ocurre.

He visto que la funcion list_adjustments en el trozo de codigo:

if (count($loan_ids)>0)
{
$this->load_model('loan1_model');
$data['loans'] = $this->model->get_rows(array('loan_id'=>$loan_ids));
print_r($data['loans']);

cuando loans_ids son mas de 99 la variable data['loans'] no se asigna nada, pero en cuanto es menos de 100 se seleccionan perfectamente.

La limitación de memoria la descarte, puesto que en otras partes de la aplicacion utiliza la misma función sin ningún tipo de problema.

Siento poner algun "print_r" inútil pero son las pruebas que estoy realizando para encontrar el error.

Muchisimas gracias.

Un saludo