Consultas con get_records_sql

Consultas con get_records_sql

de Asier Ramos Martinez -
Número de respuestas: 4
Hago esto en un archivo y me devuelve como que si que hay algo pero no me muestra nada, tan solo el echo 'Filas'...He probado poniendo tambien, $log->id y $log->action!!!

$sql="select id, action from beta_log";
if(!$log = get_records_sql($sql)){
echo 'No hay filas en el array';
}else{
echo 'Filas';
echo $log[id];
echo $log[action];
}

Ya siento ser tan pesado pero estoy en mi 3ºdia de trabajo con PHP, despues de 4 años sin tocar la programacion, y me han metido a programar cosillas para Moodle y me esta costando horrores...

Muchas gracias por lo que me estan ayudando!!
Promedio de valoraciones: -
En respuesta a Asier Ramos Martinez

Re: Consultas con get_records_sql

de Xavier Paz -
La función get_records_sql como muchas otras en Moodle, te devuelve un array de objetos, donde cada objeto es una fila obtenida en la consulta.

En estos casos, lo más recomendable es usar un foreach para recorrer todo el array. Sería algo así.

if (!$log = get_records_sql($sql)){
error('');
}else{
foreach($log as $entrada_log){
echo "$entrada_log->id .. $entrada_log->action\n";
}
}
En respuesta a Xavier Paz

Re: Consultas con get_records_sql

de Asier Ramos Martinez -
Y si solo quisiese mostrar 1?Es decir esos dos campos de esa primera fila...He probado quitando el foreach y no me muestra nada. He probado como $log[0]->id y tampoco...
En respuesta a Asier Ramos Martinez

Re: Consultas con get_records_sql

de Asier Ramos Martinez -
Vale he seguido tu ejemplo y me funciona, pero tengo un problema...

Quiero almacenar en una variable el primer registro para ir comparandolo con los siguientes pero no me deja...

este es el codigo:

$tiempo=time();
$dia= date('d',$tiempo);
$mes= date('m',$tiempo);
//echo date('d//m//y','1234513211');
 
$sql='select time from beta_log where month(from_unixtime(time))='.$mes.' and day(from_unixtime(time))='.$dia.' order by time asc';
echo $sql. '<br \>';
if (!$log = get_records_sql($sql)){
error('No hay ningun registro');
}else{
$primerregistro= $log->time;
echo "aaa $primerregistro <br \>";
$horaprimerregistro= date('his', $primerregistro);
echo "bbbb $horaprimeregistro <br \>";
foreach($log as $entrada_log){
echo "$entrada_log->time <br \>";
}
}

y esta la captura de pantalla del resultado:
salidapantalla.jpg
En respuesta a Asier Ramos Martinez

Re: Consultas con get_records_sql

de Gabriel Dias -
El error está cuando hace:




la función get_records_sql te retorna un array de objetos, asique no podes referenciar al primer elemenro del array como lo hiciste.

podes usar la función current que te devuelve el elemento actual de un array.

Sería algo asi:

if (!$log = get_records_sql($sql)){
error('No hay ningun registro');
}else{
$primerregistro= current($log);
echo "time $primerregistro->time <br \>";
foreach($log as $entrada_log){
echo "$entrada_log->time <br \>";
}

De esta forma solo estas copiando el contenido del primer elemento del array $log en una variable, que es distinto a sacarlo del array(por las dudas hago la aclaración)

Espero te sirva