2011-08-19 11 views
7

Sto provando a recuperare i dati da MS SQL tramite una pagina php. Ho una connessione valida e sto provando un semplice SELECT * da MyTable ma sqlsrv_num_rows è vuoto, non importa quello che faccio !!!Non viene restituito nulla da sqlsrv_num_rows

Ecco il mio codice:

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)); 
    }  


} 

L'eco per il collegamento stabilito è di lavoro in modo che tutti AOK lì!

Ora, quando faccio una semplice query:

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); 

ricevo assolutamente nulla da l'eco di cui sopra? Qualche ragione per cui? Oppure puoi suggerire una nuova eco che posso provare a eseguire il debug di questo?

Tutto il mio codice nella mia classe DB viene convertito da mysql quindi potrebbero esserci alcuni bit errati che causano il danno!

Ho anche provato una versione super semplice, tutto il codice insieme ed è ancora in bianco/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

Possiamo vedere il contenuto di $ sql? –

+2

Spiacente di averlo corretto ora, ha bisogno di $ opzioni che si aggiungono alla query: Trovato la risposta subito dopo la pubblicazione! Avete bisogno di questo nel vostro codice di ricerca: $ this-> sql = $ sql; \t \t $ params = array(); \t \t $ options = array ("Scrollable" => SQLSRV_CURSOR_KEYSET); \t \t $ this-> recordset = sqlsrv_query ($ this-> connessione, $ sql, $ params, $ opzioni); "SQLSRV_CURSOR_KEYSET \t Consente di accedere alle righe in qualsiasi ordine. Tuttavia, un cursore keyset non aggiorna il conteggio delle righe, se una riga viene eliminata dalla tabella (una riga eliminata viene restituita senza valori). keyset è la forma abbreviata di SQLSRV_CURSOR_KEYSET. " –

+1

sentiti libero di pubblicare la tua risposta ;-) – VolkerK

risposta

14

Prova questa .....

Sostituire sotto dichiarazione

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

come

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

Alcune spiegazioni devono essere richieste! Aiuta a capire meglio il rader rispetto al copypaste. :) – SHAZ

Problemi correlati