[英]PHP mssql and while loop skips one item
我有一個小問題,我試圖從數據庫中回顯所有符合我條件的項目。 有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));
}
這是殺手er:它使您失去了其中一行,因為您只是使用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/zh/function.sqlsrv-fetch-array.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.