Comunidad de diseño web y desarrollo en internet online

ResultSet en php

Citar            
MensajeEscrito el 13 Feb 2007 05:05 pm
Hola, tengo una pagina .php que se conecta a una BBDD en access por ODBC. Y tengo un pequeño problema... Cuando ejecuto la consulta, se ejecuta bien, pero cuando muestro por pantalla el contenido del ResultSet, si suponemos que el resultset tiene 2 resultados, solo se me muestra un resultado, en este caso a partir del segundo, omitiendo el primero. Y si solo hay un resultado, no me muestra nada. Sé que en java hay una función que se escribe asi --> rs.first() y que te situa el cursor al principio del ResultSet. la pregunta és, hay alguna manera de hacer esto mismo en php? Y si no la hay, ¿como puedo hacer para que me muestre ese primer resultado?

Os dejo el trozo de codigo en el que hago la conexion y ejecuto la query, para que tengais mas claro que es lo que hago:

Código :

if (($town!="0") and ($country!="0") and ($tecno !="0")){
      
       $conexion = odbc_connect("green","","","");

        $consulta= "Select * from master WHERE  country like '".$country."' and town like '".$town."' and (((MASTER.[".$tecno."])=Yes))";
   echo $consulta;
       $rs= odbc_exec($conexion,$consulta ) or die( "Error conectando a la Base de datos") ;    
      
    
  if (odbc_fetch_row($rs)) {  

 while (odbc_fetch_row($rs))

            {  ?>         
            <tr>
                   <td><?php echo odbc_result($rs,"Name of the company");?> &nbsp;</td>
                   <td><?php echo odbc_result($rs,"town");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"country");?>&nbsp;</td>
                    <td><?php echo odbc_result($rs,"Telephone Number");?>&nbsp;</td>
                    <td><?php echo odbc_result($rs,"Fax number");?>&nbsp;</td>
                   <td><?php echo odbc_result($rs,"E-Mail");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Web Site");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Address");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Zip Code");?>&nbsp;</td>
            </tr>
            
            <?php 
            } 
   ?>
</table>
   <?php
   }




Alguna idea por favor?

Por neomorph

6 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 13 Feb 2007 05:57 pm
Hola,

el problema se encuentra aquí:

Código :

if (odbc_fetch_row($rs)) {  

   while (odbc_fetch_row($rs))


lees los 2 primeros registros, por eso el primero nunca se te muestra. Prueba quitandole el if (no debería darte error aunque no te devuelva el SELECT ningún registro.

Saludos!

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

opera
Citar            
MensajeEscrito el 13 Feb 2007 06:13 pm
Muchas gracias me ha funcionado, era eso que decias que leia los dos primeros registros, no sabia que eso pasara asi...
Si te fijas ahora la cuestión está en que ese if estaba para controlar que si la select me devolvia ningun registro, mostrar un mensaje que dijera que no se han encontrado registros. Si quito el if, no me sale el mensaje. Sabeis alguna manera de poder controlar esto?

Por neomorph

6 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 13 Feb 2007 10:57 pm
Hola,

mirando la ayuda de PHP he visto la función odbc_num_rows que puede servirte:

Código :

if (odbc_num_rows($rs) > 0) {
  // código si hay filas devueltas
} else {
  // código si no las hay
}


Prueba esto. En el link que te he indicado pone que esta función puede que no devuelva el valor esperado o correcto (depende del driver ODBC utilizado). En tal caso deberás hacerlo de otro modo.

Saludos!

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

opera
Citar            
MensajeEscrito el 14 Feb 2007 09:36 am
pues la verdad es que no me ha funcionado, he mirado el link de la ayuda esta que me has puesto y no he podido hacerlo. Lo unico que quiero es qeu si no encuentra nada en el Resultset este, me diga que no ha encontrado resultados... no creo qeu sea tan dificil de hacer... Pero no doy con la manera....

Por neomorph

6 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 14 Feb 2007 10:21 am
:( Esa sería le mejor forma si hubiera funcionado... Sin embargo, por suerte, siempre hay varias formas de realizar una cosa :D

Una de ellas sería, basándome en el primer código que posteaste, repetir el código que rellena una fila de resultados despues del if y antes del while. Bueno, en realidad encapsularía ese código dentro de una función para que fuera mas legible y se pudiera mantener mejor. Sin rollos, ésta sería la función:

Código :

function printRow() {
   ?>         
   <tr>
      <td><?php echo odbc_result($rs,"Name of the company");?> &nbsp;</td>
      <td><?php echo odbc_result($rs,"town");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"country");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"Telephone Number");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"Fax number");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"E-Mail");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"Web Site");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"Address");?>&nbsp;</td>
      <td><?php echo odbc_result($rs,"Zip Code");?>&nbsp;</td>
   </tr>
   <?php
}


y este tu código principal:

Código :

...
$rs= odbc_exec($conexion,$consulta ) or die( "Error conectando a la Base de datos") ;    

if (odbc_fetch_row($rs)) {  
   printRow();
   while (odbc_fetch_row($rs)) {
      printRow();
   }
} else {
   echo "Pues va a ser que no hay datos";
}


Prueba y nos comentas

Saludos!

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

opera
Citar            
MensajeEscrito el 14 Feb 2007 11:08 am
Antes que nada muchas gracias por tu ayuda. En serio, sin ella me hubiera desesperado... He encontrado la manera de hacerlo y que funcione.. Os dejo el codigo para que lo mireis...

Código :

//caso 1-1-1
if (($town!="0") and ($country!="0") and ($tecno !="0")){
      
       $conexion = odbc_connect("green","","","");

        $consulta= "Select * from master WHERE  country like '".$country."' and town like '".$town."' and (((MASTER.[".$tecno."])=Yes))";
   
       $rs= odbc_exec($conexion,$consulta ) or die( "Error conectando a la Base de datos") ;    
      
if (odbc_fetch_row($rs, 1)) { //Si hay Resultados   <--------------------------

?>  
<table width="100%" border="1">
  <tr>
    <td width="192"><strong>NAME OF THE COMPANY</strong></td>
    <td width="45"><strong>TOWN</strong></td>
    <td width="79"><strong>COUNTRY</strong></td>
    <td width="166"><strong>TELEPHONE NUMBER</strong></td>
    <td width="135"><strong>FAX NUMBER</strong></td>
    <td width="30"><strong>E-MAIL</strong></td>
    <td width="74"><strong>WEB SITE</strong></td>
    <td width="83"><strong>ADDRESS</strong></td>
    <td width="113"><strong>ZIP CODE</strong></td>
  </tr>
 <?php
    odbc_fetch_row($rs, 0); //vuelve a la primera row <--------------------------
  while (odbc_fetch_row($rs))

            {  ?>         
            <tr>
                   <td><?php echo odbc_result($rs,"Name of the company");?> &nbsp;</td>
                   <td><?php echo odbc_result($rs,"town");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"country");?>&nbsp;</td>
                    <td><?php echo odbc_result($rs,"Telephone Number");?>&nbsp;</td>
                    <td><?php echo odbc_result($rs,"Fax number");?>&nbsp;</td>
                   <td><?php echo odbc_result($rs,"E-Mail");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Web Site");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Address");?>&nbsp;</td>
                  <td><?php echo odbc_result($rs,"Zip Code");?>&nbsp;</td>
            </tr>
            
            <?php 
            } 
   ?>
</table>
<?php }else{ //Sino muestra que no hay resultados
?>
NO RESULTS FOUND IN DATABASE
<?php }
} 


if (odbc_fetch_row($rs, 1))

La clave estaba en el numerito de al lado de $rs :cool: , que indica el numero de row por que te quieres mover. Comparto esto con vosotros para que si alguien se encuentra con el mismo problema que yo, sepa solucionarlo ^^

Por neomorph

6 de clabLevel



Genero:Masculino  

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.