sqlsrv_execute возвращающий курсор я не могу вернуться из моего метода - PullRequest
0 голосов
/ 31 октября 2018

Недавно мы обновили нашу версию PHP с 5 до 7, поэтому мне пришлось изменить классы, используемые для доступа к нашей базе данных MS SQL.

Я начал использовать sqlsrv, и у меня есть метод в классе для выполнения хранимых процедур, который в значительной степени делает это

    <?php
    $stmt = sqlsrv_prepare($db, $sql, $procedure_params);
    if (!sqlsrv_execute($stmt)) { 
          if( ($errors = sqlsrv_errors() ) != null)  
          {  
             foreach( $errors as $error)  
             {  
                echo "SQLSTATE: ".$error[ 'SQLSTATE']."\n";  
                echo "code: ".$error[ 'code']."\n";  
                echo "message: ".$error[ 'message']."\n";  
                die();
             }  
          }  
    }
    // (1) This works, I get all the rows with data, etc... 
    while($row = sqlsrv_fetch_array($stmt)){
        print_r($row);
    }
    // (2) Returning the cursos won't work, I cannot fetch it when I return it as a result
    return $stmt;
    ?>

После выполнения хранимой процедуры я получаю результат и могу получить его без проблем (1). Однако, если я возвращаю курсоры как результат моего метода / функции, когда я получаю курсоры в результате вызова метода, я не могу получить его, как если бы он был пустым. (2)

Есть идеи? Извините, если это глупый вопрос, но я гуглюл по этой проблеме, и я не вижу сообщений о подобной проблеме.

Спасибо!

1 Ответ

0 голосов
/ 31 октября 2018

Прежде всего, почему вы хотите вернуть ресурс SQL? Если вы сделаете это, вам будет сложнее закрыть соединение, так как вам нужно будет sqlsrv_free_stmt ($ stmt); в функции, к которой вы возвращаетесь.

Во-вторых, я не эксперт по PHP, но я полагаю, что вы используете sqlsrv_execute , который в основном предназначен для одноразового выполнения с параметрами, такими как вставки, обновления и удаления. Если вы хотите вернуть курсор со строками в нем, вы можете использовать sqlsrv_query .

...