entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Consulta sql vacía, devolver leyenda sin resultados

HOla.
Estoy trabajando con PHP y ACCESS.
Tengo que buscar registros de una tabla, pero cuando la búsqueda no es exitosa, no logro que devuelva un mensaje de "Consulta vacía".
Tengo problema con la forma de elaborar la consulta. Vean:

<?php 
include("menu.php"); 
include("conecta.php"); 

$termino=$_GET["q"];

if(!$termino){
exit ("<h3>Buscar en fondo bibliográfico</h3><br><form class=smooth action=buscar.php><input type=text name=q><input type=submit value=Buscar></form>");
}
// Se define la consulta que va a ejecutarse
$sql = "SELECT * FROM libros where (libros.autor like '%{$_REQUEST['q']}%') or (libros.titulo like '%{$_REQUEST['q']}%')";
// Se ejecuta la consulta y se guardan los resultados en el recordset rs
$rs = odbc_exec( $conn, $sql );
if ( !$rs ) { exit( "Error en la consulta SQL" );
}

 **// ACÁ QUISIERA PONER UN ----> IF( ?? == "") { exit ("Sin resultados");};
 // Si la consulta es verdadera, muestro los resultados**

echo "<h3>Fondo bibliográfico</h3>";
echo "<table class='table-striped table'><thead><tr><th colspan=3></tr></thead><tbody>";

while ( odbc_fetch_row($rs) ) {

$nrex=odbc_result($rs,"num_rex"); 
$resultado=odbc_result($rs,"titulo"); $autor=odbc_result($rs,"autor");
$prestado=odbc_result($rs,"Prestado");
echo "<tr><td>Título: ".$resultado."<br> Autor: ".$autor."<br>Disponibilidad: ";
if($prestado=='0'){
echo "Disponible";
} else {
echo "Prestado";
}
[...]

}

// Se cierra la conexión
odbc_close( $conn );
?>

Desde ya muchas gracias.

2 Respuestas

1voto

top21tk Puntos2090

HOla Amigos,
Revisando el código lo solucioné con un simple "if".
En vez de utilizar:

    while ( odbc_fetch_row($rs) ) {

Usé:

    if ( odbc_fetch_row($rs) ) {
...
} else {
exit ("No se encontraron datos");
}

Y listo. Quedó funcionando.

Saludos...

2votos

Leonardo-Tadei Puntos227320

Hola Top21tk,

tu problema está en asumir que:

if ( !$rs )

dará falso si no hay resultados. Ese IF dará falso solo si hay un error en la ejecución de la query, y no devolver datos no es un error.

Nunca usé conexiones ODBC salvo para migrar sistemas, pero si hay un equivalente al mysqli_num_rows() usalo, y si no ejecutá previamente un COUNT en SQL con la misma condición, y revisá que no de 0 registros.

Si el COUNT da que hay más de 0 registros, luego ejecutás la query que devuelve los resultados.

Saludos!

0voto

carlossevi comentado

Leonardo se refiere a la función odbc_num_rows() (referencia).

0voto

Leonardo-Tadei comentado

Gracias por el aporte @carlossevi!

El tema es que algunos drivers no implementan esta función, y hay que hacer un COUNT... sospechaba esto porque las PDO ni siquiera implementan algo parecido a *_num_rows() y en la úiltima generación de nuestro software hay que hacer otra query para obtener la cantidad de filas devueltas.

Saludos!

0voto

carlossevi comentado

Disculpa, no sabía eso =)

De todas formas, si esa función no está disponible, yo tiraría por la solución de reordenar un poquito el código y aprovechar el resultado de odbc_fetch_row() para saber si existe al menos un resultado en lugar de obtener el count si no lo necesitas.

Si el count se necesitara igualmente para hacer paginación no discuto el usarlo, pero sólo obtenerlo para saber si hay resultados o no me parece poco eficiente.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta