While循环仅获取最后一行

时间:2019-11-07 16:05:40

标签: php sql-server

我正在尝试从此表中汇总一些数字,由于某种原因,它只给了我最后一行。当我使用SQL Server Studio手动检查表时,数据在那里。

$sql = "SELECT * FROM dbo.timesheets";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    $totalVacation = $row['sunV1']+$row['sunV2'];
}

2 个答案:

答案 0 :(得分:1)

您将在每次迭代中重置值,覆盖上一次迭代中变量所包含的内容:

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    $totalVacation = $row['sunV1']+$row['sunV2'];
}

您要不断地将这些值相加。也就是说,新值是旧值加上当前值:

$totalVacation = 0;
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    $totalVacation = $totalVacation + $row['sunV1']+$row['sunV2'];
}

或者,简写语法:

$totalVacation = 0;
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    $totalVacation += $row['sunV1']+$row['sunV2'];
}

答案 1 :(得分:0)

不要在循环中覆盖$ totalVacation,总结一下:$totalVacation += $row['sunV1']+$row['sunV2'];

您需要在while(...)语句上方初始化变量$totalVacation,通常用$totalVacation = 0;完成。