PHP mssql和while循环跳过一个项目

时间:2016-01-22 19:48:28

标签: php sql sql-server sql-server-2008

我有一点问题,我试图回应数据库中的所有项目,符合我的条件。有4个项目 - 但我只打印了3个。有什么想法吗?

$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
$sql = "SELECT Description
        FROM MI_Tracker
        WHERE Status ='In Progress'";
$stmt = sqlsrv_query( $conn, $sql);
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);
if( sqlsrv_fetch( $stmt ) === false) {
     die( print_r( sqlsrv_errors(), true));
}
do  
{ echo $row['Description'],'<br>';}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) );

代码编辑:

$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {

}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
$sql = "SELECT Description
        FROM MI_Tracker
        WHERE Status ='In Progress'";
$stmt = sqlsrv_query( $conn, $sql);
if( sqlsrv_fetch( $stmt ) === false) {
     die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) )
{ echo $row['Description'],'<br>';}

仍然 - 缺少1项。

2 个答案:

答案 0 :(得分:1)

从代码中删除第一次出现的以下行:

$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);

还有另一个你拿到的东西:

if( sqlsrv_fetch( $stmt ) === false) {
     die( print_r( sqlsrv_errors(), true));
}

这是杀手:它让你丢失其中一行,因为你只是将指针移动到第三行if。 相反,直接检查 $ stmt 变量上的错误,并使用标准的while循环,如下所示:

$stmt = sqlsrv_query( $conn, $sql);
if( $stmt === false) {
     die( print_r( sqlsrv_errors(), true));
}
while ($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {
    echo $row['Description'],'<br>';
}

它会获取一行,但由于您稍后会执行while循环,因此您永远不会处理该第一行。在你用它做任何事情之前,循环再次执行获取,这意味着你丢失了第一行。

答案 1 :(得分:0)

只需这样做

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) );

如果没有此之前的声明:

$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC); //Remove this
if( sqlsrv_fetch( $stmt ) === false) {

点击此处查看示例。 http://php.net/manual/en/function.sqlsrv-fetch-array.php