我有一点问题,我试图回应数据库中的所有项目,符合我的条件。有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项。
答案 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