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

Haciendo búsquedas usando SQLSRV

Pregunto esto por si a alguien le ha pasado algo parecido. A ver tenemos un sistema corriendo sobre PHP 5.2.17 usando como funciones de manejo de la base de datos MSSQL. Bien después de "convertir" el sistema a PHP 5.5.11 usando SQLSRV cuando hago una búsqueda en la barra de búsqueda (que es "interactiva" y muestra las coincidencias conforme vas escribiendo) me ocurre lo siguiente:

  • En el sistema "live" que lleva funcionando y testado correctamente años que corre sobre MSSQL me muestra todo OK, por ejemplo busco: LOPE y me sale "Carlos Lope" "Juan Lopera" y "Manuel Lopez" en ese orden porque son los que coinciden vale?
  • En el sistema que corre sobre PHP 5.5.11 usando funciones SQLSRV buscamos LOPE y el primer resultado lo oculta, el sistema sabe que existe porque si hago echo numrows sabe que son 3 resultados pero el primero no lo muestra, es como que empieza a recorrer el array en la fila dos, en vez de en la primera. A alguien le ha pasado esto anteriormente o tiene alguna idea de cómo solucionarlo?

Es un tanto extraño y no tengo ni idea de qué puede ocurrir. Si necesitáis trozos de código aquí os pongo dos ejemplos de la misma búsqueda:

ÉSTA NO FUNCIONA:

$result = sqlsrv_query($dbh,"SELECT TOP 20 uniquekey, name FROM table WHERE [uniquekey] in (".$myid.") and (name like '%".$_REQUEST['value']."%') ORDER BY name");
        $rows = sqlsrv_fetch_array($result, SQLSRV_FETCH_NUMERIC);
        if ($rows > 0)
        {
            while($row = sqlsrv_fetch_array($result))
            {
                echo "<a href=\"#\" onclick=\"selectsuggested('".$row{'uniquekey'}."');\">".$row{'name'}."</a>";
            }
        }

ÉSTA FUNCIONA

$result = mssql_query("SELECT TOP 20 uniquekey, name FROM table WHERE [uniquekey] in (".$myid.") and (name like '%".$_REQUEST['value']."%') ORDER BY name");
        if (mssql_num_rows($result) > 0)
        {
            while($row = mssql_fetch_array($result))
            {
                echo "<a href=\"#\" onclick=\"selectsuggested('".$row{'uniquekey'}."');\">".$row{'name'}."</a>";
            }
        }

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola ankeorum,

el primer código no funciona (bueno, sí funciona per se te pierde el primer dato) porque cuando hacés

$rows = sqlsrv_fetch_array($result, SQLSRV_FETCH_NUMERIC);

antes del IF, esa instrucción te pone en $rows el primer registro pero también avanza en 1 el subset de resultados, con lo que parece que el primer registro se perdió.

Para saber la cantidad de filas que tiene el resultado, deberías usar

sqlsrv_num_rows($result)

como en el código que sí funciona bien.

Saludos!

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