За последние 24 часа нас посетили 18645 программистов и 1630 роботов. Сейчас ищут 1132 программиста ...

Почему sqlsrv_num_rows возвращает false?

Тема в разделе "MSSQL", создана пользователем Artur_hopf, 20 авг 2018.

  1. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Добрый день, есть запрос вида:
    PHP:
    1. $serverName = "serv";
    2.  
    3. $connectionInfo = array( "Database"=>"Database", "UID"=>"uid", "PWD"=>"pwd");
    4. $conn = sqlsrv_connect( $serverName, $connectionInfo);
    5.  
    6. if( $conn == false) {
    7.     die( print_r( sqlsrv_errors(), true));
    8. }
    9.          
    10. $res = "SELECT ID FROM base WHERE ID = '1' ";
    11.                          
    12. $stmt = sqlsrv_query($conn, $res);
    13.  
    14. $count = sqlsrv_num_rows($stmt);
    15.  
    16. if( $count > 0 ) {
    17.     echo '1';
    18. } else {
    19.     echo '0';
    20. }    
    21.  
    22. if($stmt == false){
    23.     die( print_r( sqlsrv_errors(), true ) );
    24. }
    25.  
    26. sqlsrv_close($conn);
    Почему $count возвращает ноль?
    Сам запрос $res я проверил, по нему есть данные.

    Пример брал отсюда https://php.ru/manual/function.sqlsrv-num-rows.html
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    PHP:
    1. if( $stmt === false ) {
    2.      die( print_r( sqlsrv_errors(), true));
    3. }
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    • Нет, это не причем, проверил только что.
    • Вот так заработало
    • PHP:
      1. $rows = sqlsrv_has_rows($stmt);
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Какое количество строк ожидается в выборке? (Судя по всему, 1: WHERE ID = '1')
    Они с 0 нумеруются как бы. Соответственно == 0 означает, что у вас одна строка соответствует условиям запроса в таблице

    PHP:
    1.     if ( $count === false)
    2.       echo "\nerror\n";
    3.    else if ( $count >=0)
    4.       echo "\n$count\n";
    $count >=0
     
    #4 Zuldek, 20 авг 2018
    Последнее редактирование: 20 авг 2018
    Artur_hopf нравится это.
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Artur_hopf, в описании функции написано, что: "This function requires that the statment resource be created with a static or keyset cursor".
    То есть, в метод sqlsrv_query() в этом случае надо передавать 4-й параметр (массив опций).
    --- Добавлено ---
    @Zuldek, количество, равное 0 означает, то, что в результате нет строк, удовлетворяющих условаям запроса.
    @Artur_hopf, там-же написано, что если использовть значение опций по-умолчанию, функция возвращает false, при нестрогом сравнении приводимое к нулю.
     
    Zuldek нравится это.
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Спасибо, буду знать теперь.
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    абсолютно верно, спасибо.