我有一个小问题,我试图回显数据库中所有符合我条件的项目。有 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 个项目。
从代码中删除以下行的第一个匹配项:
$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
循环执行此操作,因此您永远不会处理第一行。循环会在您对其执行任何操作之前再次执行提取,这意味着您丢失了第一行。
只需执行此操作
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