带有sqlsrv_num_行的PHP
我试图执行SQL Server数据库的查询,查看多对多关系。我将要从中获取行的表与关系表链接,并插入唯一id,在本例中为$guid 查询有时是功能性的。它会工作,然后我将$guid单独切换到另一个,但它失败了,即使我盯着表看,它有与新$guid关联的值带有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
<?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' ));