2011-08-19 44 views
7

Tôi đang cố kéo dữ liệu từ MS SQL qua trang php. Tôi đã có một kết nối hợp lệ, và đang thử một SELECT đơn giản * FROM MyTable nhưng sqlsrv_num_rows chỉ là trống bất kể tôi làm gì !!!Không nhận lại bất cứ điều gì từ sqlsrv_num_rows

Đây là mã của tôi:

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 cho kết nối được thiết lập là làm việc vì vậy tất cả AOK đó!

Bây giờ khi tôi làm một truy vấn đơn giản:

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

tôi nhận hoàn toàn không có gì từ tiếng vang trên? Có lý do gì không? Hoặc bạn có thể đề xuất một tiếng vang mới tôi có thể thử gỡ lỗi này không?

Tất cả mã của tôi trong lớp DB của tôi được chuyển đổi từ mysql để có thể có một vài lỗi sai đang làm thiệt hại!

Tôi thậm chí đã cố gắng một phiên bản siêu đơn giản, tất cả các mã với nhau và nó vẫn còn trống/sai:

$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

chúng ta có thể thấy nội dung của $ sql? –

+2

Xin lỗi tôi đã sửa nó ngay bây giờ, nó cần $ tùy chọn thêm vào truy vấn: Tìm câu trả lời ngay sau khi đăng! Bạn cần mã này trong mã truy vấn: $ this-> sql = $ sql; \t \t $ params = array(); \t \t $ options = array ("Scrollable" => SQLSRV_CURSOR_KEYSET); \t \t $ this-> recordset = sqlsrv_query ($ this-> connection, $ sql, $ params, $ options); "SQLSRV_CURSOR_KEYSET \t Cho phép bạn truy cập vào hàng trong bất kỳ thứ tự. Tuy nhiên, một con trỏ keyset không cập nhật hàng đếm nếu liên tiếp sẽ bị xóa khỏi bảng (liên tiếp xóa được trả lại không có giá trị). keyset là dạng viết tắt của SQLSRV_CURSOR_KEYSET. " –

+1

cảm thấy tự do để gửi câu trả lời của riêng bạn ;-) – VolkerK

Trả lời

14

Hãy thử điều này .....

Thay dưới đây tuyên bố

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

như

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

Một số giải thích phải được yêu cầu! Nó giúp hiểu rader tốt hơn so với copypaste. :) – SHAZ

Các vấn đề liên quan