Странная ошибка "sqlsrv_fetch_array (): 16 не является допустимым ресурсом ss_sqlsrv_stmt", так как ReturnDatesAsStrings - PullRequest
1 голос
/ 23 августа 2011

Я использую драйвер sqlsrv для IIS, чтобы я мог подключиться к серверу MS SQL на PHP.

Мне удалось преобразовать большую часть моего исходного кода mysql_ и все шло хорошо, пока я не попытался ВЫБРАТЬ некоторые поля DateTime из базы данных. Они возвращались как объекты Date в PHP, а не как строки. Я нашел исправление, добавляющее это в массив соединений:

'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

На эту ошибку в Google так мало помощи, так что это мой единственный шанс! Я просто не понимаю.

row_read вызывается изнутри while: while ($ row = $ db-> row_read ($ rs)) {

Есть идеи?

Просто чтобы добавить больше кода и логики - я делаю простой SELECT из всех моих заказов, затем, когда он проходит через них, я делаю еще 2 SELECT в таблице заказов, затем в таблице клиентов. Это падает, когда я пытаюсь получить эти дополнительные 2 'get':

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

4 голосов
/ 05 ноября 2011

Передали ли вы эту переменную ресурса другой функции?Если да, вы можете попробовать выполнить sqlsrv_query и sqlsrv_fetch_array в одной функции;не передавайте ресурс ss_sqlsrv_stmt другой функцией.Надеюсь, что это поможет.

2 голосов
/ 03 июля 2012

Включает ли ваша программа функцию вложенного запроса?

Если да, то следующий вопрос: вы открываете ту же базу данных во внутренней функции запроса?

Попробуйте эти изменения:

  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))
0 голосов
/ 23 августа 2011

sqlsrv_fetch_array нужен ресурс ss_sqlsrv_stmt.Должно быть что-то не так с вашим SQL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...