PHP с sqlsrv_num_rows - PullRequest
       1

PHP с sqlsrv_num_rows

3 голосов
/ 12 августа 2011

Я пытаюсь выполнить запрос к базе данных SQL Server, изучая взаимосвязь «многие ко многим». Я связываю таблицу, из которой я хочу получить строки, с таблицей отношений и вставляю уникальный идентификатор, в данном случае $ guid.

Запрос иногда бывает функциональным. Это сработает, а затем я переключаю только $ guid на другой, и это не удается, хотя я смотрю на таблицу и у нее есть значения, связанные с этим новым $ guid.

<?php
$guid = '{893C7BF8-E8C5-41D5-9C61-A72CF62DDBA8}';

// Connect to Database
$server = "#@#($#";     
$connectionSettings = array("Database"=>"db", "UID"=>"user", "PWD"=>"pword");
$connection = sqlsrv_connect($server, $connectionSettings);

if (!$connection){
    die("Failed Connection");
}

// Prepare and Execute Query
$sql = "SELECT * 
        FROM STREAMS.ATTACHMENTS a INNER JOIN STREAMS.RELATTACHMENTS ra
        ON a.ROWGUID = ra.ATTACHMENT_GUID
        WHERE ra.FEATURE_GUID = '" . $guid . "'";

$results = sqlsrv_query($connection, $sql);
$rowCount = sqlsrv_num_rows( $results );

if ($rowCount === false)
    echo "failure";
else
    echo $rowCount;

while($row = sqlsrv_fetch_array($results)){
    echo "loop";
}
?>

Даже незнакомец, выход к этому коду следующий:

failurelooploop

Таким образом, это означает, что команда sqlsrv_num_rows не учитывает ни одной строки в результате ... но также подразумевает, что один и тот же набор результатов имеет 2 строки, поскольку цикл while обернулся дважды.

Кто-нибудь может объяснить это странное поведение?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Держу пари, что у вас есть какая-то ошибка: sqlsrv_num_rows вернет FALSE, если что-то пойдет не так. Вы можете получить сообщение об ошибке через:

// probably don't want this in production.
print_r( sqlsrv_errors());

Полагаю, причина связана с вашей колонкой guid, но я не уверен. : -)

О, и если вам не нужно количество строк, не используйте его. Используйте do... while вместо:

$row = sqlsrv_fetch_array($results);
if($row)
{
    do{
        echo "loop";
    } while( $row = sqlsrv_fetch_array( $results ) );
}
else
{
    // No results found
    // you can output print_r( sqlsrv_errors() ); here
}
0 голосов
/ 12 января 2016

Эта ошибка отображается для типа курсора SQLSRV_CURSOR_FORWARD & SQLSRV_CURSOR_DYNAMIC. мое личное предпочтение - не использовать его. если вы все еще хотите использовать его, передайте дополнительный параметр в функцию запроса, например:

$stmt = sqlsrv_query( $connection, $sql, array(), array( "Scrollable" => 'keyset' ));
// $stmt = sqlsrv_query( $connection, $sql, array(), array( "Scrollable" => 'dynamic' ));
// $stmt = sqlsrv_query( $connection, $sql, array(), array( "Scrollable" => 'static' ));

проверить больше: https://msdn.microsoft.com/en-us/library/hh487160.aspx - http://php.net/manual/en/function.sqlsrv-query.php

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