2011-08-19 19 views
7

Próbuję wycofać dane z MS SQL za pośrednictwem strony php. Mam poprawne połączenie i próbuję proste SELECT * FROM MyTable, ale sqlsrv_num_rows jest po prostu puste, bez względu na to, co robię!Nie otrzymuję niczego z powrotem z sqlsrv_num_rows

Oto mój kod:

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


} 

Echo za połączenie, które pracuje tak wszystko AOK tam!

Teraz kiedy zrobić proste zapytanie:

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

mam absolutnie nic z powyższego echa? Jakiś powód, dlaczego? Czy możesz zasugerować nowe echo, czy mogę spróbować to debugować?

Cały mój kod w mojej klasie DB jest konwertowany z mysql, więc może być kilka błędów, które powodują obrażenia!

Mam nawet próbował super prostą wersję, cały kod razem i nadal jest pusty/fałsz:

$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

widzimy zawartość $ sql? –

+2

Niestety, naprawiłem to teraz, potrzebuje $ opcji dodawania do zapytania: Znalazłem odpowiedź natychmiast po wysłaniu! Potrzebujesz tego w zapytaniu: $ this-> sql = $ sql; \t \t $ params = array(); \t \t $ options = array ("Przewijany" => SQLSRV_CURSOR_KEYSET); \t $ this-> recordset = sqlsrv_query ($ this-> connection, $ sql, $ params, $ options); „SQLSRV_CURSOR_KEYSET \t Umożliwia dostęp do wierszy w dowolnej kolejności. Jednak kursor zestaw kluczy nie aktualizuje liczyć wiersz jeśli wiersz zostanie usunięty z tabeli (usunięty wiersz jest zwracany bez wartości). zestaw kluczy jest skróconą formą SQLSRV_CURSOR_KEYSET. " –

+1

zapraszam do zamieszczenia własnej odpowiedzi ;-) – VolkerK

Odpowiedz

14

Spróbuj .....

Wymień poniżej rachunku

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

jak

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

Pewne wyjaśnienie musi być wymagane! Pomaga lepiej zrozumieć rader niż kopypyp. :) – SHAZ

Powiązane problemy