Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有sqlsrv_num_行的PHP_Php_Database_Sql Server 2008 - Fatal编程技术网

带有sqlsrv_num_行的PHP

带有sqlsrv_num_行的PHP,php,database,sql-server-2008,Php,Database,Sql Server 2008,我试图执行SQL Server数据库的查询,查看多对多关系。我将要从中获取行的表与关系表链接,并插入唯一id,在本例中为$guid 查询有时是功能性的。它会工作,然后我将$guid单独切换到另一个,但它失败了,即使我盯着表看,它有与新$guid关联的值 <?php $guid = '{893C7BF8-E8C5-41D5-9C61-A72CF62DDBA8}'; // Connect to Database $server = "#@#($#"; $connectionSett

我试图执行SQL Server数据库的查询,查看多对多关系。我将要从中获取行的表与关系表链接,并插入唯一id,在本例中为$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";
}
?>
因此,这意味着sqlsrv_num_rows命令在结果中不计算任何行。。。但这也意味着同一个结果集有两行,因为while循环运行了两次

有人能解释这种古怪的行为吗


谢谢。

我敢打赌您一定有某种错误:
sqlsrv\u num\u rows
如果出现问题,将返回
FALSE
。您可以通过以下方式获得错误输出:

// probably don't want this in production.
print_r( sqlsrv_errors());
我猜原因与您的
guid
列有关,但我不能确定。:-)

哦,除非您需要行数,否则不要使用它。使用
do。。。而

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

对于游标类型SQLSRV\u cursor\u FORWARD和SQLSRV\u cursor\u 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' ));
查看更多:
--

Array([0]=>Array([0]=>IMSSP[SQLSTATE]=>IMSSP[1]=>-50[code]=>-50[2]=>此函数仅适用于具有静态或键集可滚动游标的语句。[消息]=>此函数仅适用于具有静态或键集可滚动游标的语句。)1looploop.///这是工作指南。。。现在对于不工作的GUID,我得到了完全相同的错误消息,但结尾没有looploop。。。这是否表明两个数组都有0个元素?在数据库中,它们确实有来自该查询的结果。我真的不理解这个错误。好吧,我在sqlsrv_num_行上出错的原因是因为我使用了默认的前向游标,所以这很好,但它仍然不能解释其他行为,sql查询只对某些GUI有效,而对其他GUI无效。。。GUID列可能有什么问题?经过12小时的搜索。。。因为这篇文章告诉我要去掉sqlsrv_num_行,我终于可以让我的登录脚本工作了。我花了一整天的时间调试我的代码,只为了找到这篇文章,它可以毫不费力地工作!伊皮。。。
$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' ));