奇怪的错误“sqlsrv_fetch_array():16不是有效的ss_sqlsrv_stmt资源”,因为ReturnDatesAsStrings

时间:2011-08-23 14:20:30

标签: php sql-server iis

我正在使用IIS的sqlsrv驱动程序,因此我可以使用PHP连接到MS SQL服务器。

我设法转换了很多原始的mysql_代码,一切顺利,直到我尝试从数据库中选择一些DateTime字段。他们在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资源

谷歌的错误提供了这么少的帮助,所以这是我唯一的一个镜头!我只是不明白。

从while:while($ row = $ db-&gt; row_read($ rs)){

中调用row_read

有什么想法吗?

只是为了添加更多代码和逻辑 - 我对所有订单进行简单的SELECT,然后当它循环遍历它们时,我在订单表上再执行2个SELECT,然后是customer表。当我尝试这些额外的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']);

3 个答案:

答案 0 :(得分:4)

您是否通过其他功能传递了此资源变量?如果是,您可以尝试执行sqlsrv_query并在一个函数中执行sqlsrv_fetch_array;不要通过其他函数传递ss_sqlsrv_stmt资源。希望它会有所帮助。

答案 1 :(得分:2)

您的程序是否涉及嵌套查询功能?

如果是这样,下一个问题是:你是否在内部查询功能中打开了同一个数据库?

尝试以下更改:

  1. 注释掉打开数据库的行,包括包含该函数的{和}
  2. 更改外部循环和内部循环之间的连接和数组变量的名称。
  3. 换句话说,外循环可能有:

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

答案 2 :(得分:0)

sqlsrv_fetch_array需要ss_sqlsrv_stmt资源。您的 SQL 一定有问题。