2011-08-19 24 views
7

Estoy intentando recuperar datos de MS SQL a través de una página php. Tengo una conexión válida y estoy probando un simple SELECT * FROM MyTable, pero sqlsrv_num_rows está en blanco sin importar lo que haga.No obtengo nada de sqlsrv_num_rows

Aquí está mi código:

function connect() { 

    $serverName = DB_HOST; //serverName\instanceName 
    $connectionInfo = array("Database"=>DB_NAME, "UID"=>DB_USER, "PWD"=>DB_PASSWORD); 
    $this->connection = sqlsrv_connect($serverName, $connectionInfo); 
    sqlsrv_connect($serverName, $connectionInfo); 


    if($this->connection) { 
     echo "<br>Connection established.<br />"; 
    }else{ 
     echo "<br>Connection could not be established.<br />"; 
     die(print_r(sqlsrv_errors(), true)); 
    }  


} 

El eco de la conexión establecida es trabajar para que todos AOK allí!

Ahora cuando hago una consulta sencilla:

function query($sql) { 
    if ($this->debug) { 
     echo $sql . "<br />"; 
    }  
    $this->sql = $sql; 
    $this->recordset = sqlsrv_query($this->connection, $sql); 

    if (!$this->recordset) { 
     die('<br><br>Invalid query :<br><br><bold>' . $this->sql . '</bold><br><br>' . sqlsrv_errors()); 
    } 

    echo "<br>rows = " . sqlsrv_num_rows($this->recordset); 

me sale absolutamente nada a partir del eco de arriba? ¿Alguna razón por qué? ¿O puede sugerir un nuevo eco? ¿Puedo intentar depurar esto?

¡Todo mi código en mi clase de base de datos se convierte de mysql así que puede haber algunos errores que están causando el daño!

incluso he intentado una versión muy simple, todo el código juntos y todavía en blanco/falso:

$server = DB_HOST; 
$conn = sqlsrv_connect($server, array("Database"=>DB_NAME, "UID"=>DB_USER, "PWD"=>DB_PASSWORD)); 
$stmt = sqlsrv_query($conn, "SELECT * FROM MyTable"); 
$row_count = sqlsrv_num_rows($stmt); 
echo "<br>row count = " . $row_count; 
if ($row_count === false) 
    echo "\nerror\n"; 
else if ($row_count >=0) 
    echo "\n$row_count\n"; 
    die; 
+0

podemos ver el contenido de $ sql? –

+2

Lo siento, lo he solucionado ahora, necesita $ opciones para agregar a la consulta: ¡Encontré la respuesta inmediatamente después de la publicación! Lo necesita en el código de consulta: $ this-> sql = $ sql; \t \t $ params = array(); \t \t $ options = array ("Desplazable" => SQLSRV_CURSOR_KEYSET); \t \t $ this-> recordset = sqlsrv_query ($ this-> connection, $ sql, $ params, $ options); "SQLSRV_CURSOR_KEYSET \t le permite tener acceso filas en cualquier orden. Sin embargo, un cursor de conjunto de claves no actualiza el número de filas si se elimina una fila de la tabla (una fila eliminada se devuelve sin valores). conjunto de claves es la forma abreviada de SQLSRV_CURSOR_KEYSET ". –

+1

no dude en publicar su propia respuesta ;-) – VolkerK

Respuesta

14

probar este .....

Reemplazar declaración abajo

sqlsrv_query($conn, "SELECT * FROM MyTable"); 

como

sqlsrv_query($conn, "SELECT * FROM MyTable", array(), array("Scrollable"=>"buffered")); 
+2

Se requiere alguna explicación! Ayuda a entender mejor Rader que copypaste. :) – SHAZ