2011-08-23 74 views
1

我使用IIS的SQLSRV驅動程序,以便我可以連接到PHP中的MS SQL服務器。奇怪的錯誤「sqlsrv_fetch_array():16是不是有效的ss_sqlsrv_stmt資源」,因爲ReturnDatesAsStrings

我已經成功地轉換了很多我原來mysql_代碼和所有進展順利,直到我試圖從數據庫中選擇一些日期時間字段。他們趕回來,在PHP Date對象而不是字符串,我發現這是增加這個到連接陣列修復:

「ReturnDatesAsStrings」 => 1

因爲這樣做,當嘗試,雖然我的代碼被打破填充我的記錄:

function row_read($recordset) { 

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

    $rs = sqlsrv_fetch_array($recordset); 
    return $rs; 
} 

的錯誤是:sqlsrv_fetch_array():16是不是有效的ss_sqlsrv_stmt資源

有幫助在谷歌的錯誤這樣的小金額,所以這是我唯一的機會!我只是不明白。

row_read從內而被稱爲:而($行= $ DB-> row_read($ RS)){

任何想法?

只是爲了增加更多的代碼和邏輯 - 我做我的所有訂單的簡單選擇,然後爲它遍歷他們,我做的是另2 SELECT的Orders表,然後客戶表。它倒下時,我嘗試這些額外的2「獲取」:

 $this->db->sql = "SELECT * FROM TicketOrders"; 

    $rs = $this->db->query($this->db->sql); 

    $this->htmlList->path("skin/search.bookings"); 

    if ($this->db->row_count != 0) { 
     while ($row = $this->db->row_read($rs)) { 

      // Load the order row 
      $this->TicketOrders->get($this->db, $row['Id']);     

      // Load the customer row 
      $this->Customers->get($this->db, $row['CustomerId']); 

回答

0

sqlsrv_fetch_array需要ss_sqlsrv_stmt資源。您的SQL必須有問題。

+0

感謝您的回答,但是當我回聲出2我的SQL的語句然後將它們粘貼回SQL Studio,它們執行得很好? 選擇ID,客戶ID,NightId,ClubName,NightName,NightDate,數量TicketType,價錢,CancelledDate,訂購日期,QuoteNumber,已完成,狀態,txn_id,EmailSent FROM TicketOrders其中id = 1086730 選擇ID,名字,姓氏, EmailAddress,訂閱從客戶那裏Id = 10068 –

+0

@詹姆斯威爾遜:也許你可以使用'sqlsrv_errors()'得到錯誤的細節。 – xdazz

+0

嗯,不是細節:sqlsrv_fetch_array():16是不是一個有效的ss_sqlsrv_stmt資源?我已經嘗試過在那條線之前和之後的呼應,它是空的 –

4

你另一個功能通過這個資源變量?如果是,您可以通過執行sqlsrv_query並在一個函數中執行sqlsrv_fetch_array來嘗試;請勿通過其他功能傳遞ss_sqlsrv_stmt資源。希望它會有所幫助。

+0

@wasimchy,爲什麼$ RecordSet不能被函數傳遞?爲什麼會通過ref傳遞失敗?而且你是非常正確的,它是這個問題的原因。 –

+0

我上面的條目(作爲答案出現)應該是一個評論!我無法弄清楚。你如何爲現有評論添加評論? –

+0

如果我能早點看到你的答案會更好。我可能在幾個星期前的短時間內找到了這個問題。現在,我記得迄今爲止,這可能是SQL Server新的PHP驅動程序的一個限制或缺陷。我用其他PHP驅動程序和FreeTDS測試了這個相同的函數(將資源變量作爲參數傳遞),這兩種情況都沒有問題。它可能會返回不同的資源類型ss_sqlsrv_stmt(如果我現在不忘記),在我的情況下,不能與PHP資源類型匹配。由於時間不足,我只是改變了我的函數風格,儘管代碼的美感略遜一籌。 – Agilox

2

請問您的計劃包括嵌套查詢功能?

如果是這樣,接下來的問題是:你在內部查詢功能打開同一個數據庫?

嘗試這些變化:

  1. 評論指出,打開數據庫的行,包括{和}圍繞該功能,
  2. 變化外環和之間的連接和數組變量的名稱內循環。

換句話說,外環可以有:

$tring = sqlsrv_query($myConn, $dbx_str1);  
while($rs_row1 = sqlsrv_fetch_array($tring, SQLSRV_FETCH_ASSOC)) 

和內環路將有:

$tring2 = sqlsrv_query($myConn, $dbx_str2);  
while($rs_row2 = sqlsrv_fetch_array($tring2, SQLSRV_FETCH_ASSOC)) 
相關問題