PHP sqlsrv_fetch_array 和 "while loop" 越过第一行
PHP sqlsrv_fetch_array with "while loop" crosses the first row
我从 MScost table 获取数据以输入到 tmp_table。
我使用带 sqlsrv_fetch_array 的 while 循环插入 tmp_table table。
getData 和 addData 是我创建的函数,用于从我的数据库中获取数据并将数据添加到我的数据库中。
$resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");
if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
$category = $row['category'];
$ttl = $row['ttl'];
addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
}
echo $category."=".$ttl."</br>";
}else {
addData($conn, "tmp_table(category,ttl1)", "'NON',0");
echo "Null";
}
没有任何错误。
但是 while 循环穿过存在的第一行。
这不是表演。它没有插入到数据库中。
然后我尝试在IF外复制while循环粘贴,它没有穿过第一行。正常工作。
这是为什么?我希望它在 IF 中工作而不穿过第一行。我该怎么办?
您的问题是您使用 if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null)
检查从结果集中读取了第一行。删除此检查,您将能够获取所有数据。
您可以尝试使用以下脚本:
<?php
$resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");
$rc = 0;
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
$rc++;
$category = $row['category'];
$ttl = $row['ttl'];
addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
echo $category."=".$ttl."</br>";
}
if ($rc == 0) {
addData($conn, "tmp_table(category,ttl1)", "'NON',0");
echo "Null";
}
?>
PHP SQL 服务器支持的驱动程序 sqlsrv_num_rows() function, which returns the number of rows in a result set. But you must use this function only if your call to sqlsrv_query() 使用客户端、静态或键集游标(默认为前向游标)。
让我们看一下这段代码:
if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
在 if
语句中您已经调用了 sqlsrv_fetch_array
,这意味着第一行 已经被提取 。在你的 while
循环中你做了更多 sqlsrv_fetch_array
调用 return 你的下一行(在第一行之后)。
if
语句本身(虽然必须删除)也不正确,必须用括号组成有效语句,使用!==
进行比较并写成null
总是小写:
if (($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) !== null) {
我从 MScost table 获取数据以输入到 tmp_table。 我使用带 sqlsrv_fetch_array 的 while 循环插入 tmp_table table。 getData 和 addData 是我创建的函数,用于从我的数据库中获取数据并将数据添加到我的数据库中。
$resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");
if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
$category = $row['category'];
$ttl = $row['ttl'];
addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
}
echo $category."=".$ttl."</br>";
}else {
addData($conn, "tmp_table(category,ttl1)", "'NON',0");
echo "Null";
}
没有任何错误。 但是 while 循环穿过存在的第一行。 这不是表演。它没有插入到数据库中。
然后我尝试在IF外复制while循环粘贴,它没有穿过第一行。正常工作。
这是为什么?我希望它在 IF 中工作而不穿过第一行。我该怎么办?
您的问题是您使用 if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null)
检查从结果集中读取了第一行。删除此检查,您将能够获取所有数据。
您可以尝试使用以下脚本:
<?php
$resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");
$rc = 0;
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
$rc++;
$category = $row['category'];
$ttl = $row['ttl'];
addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
echo $category."=".$ttl."</br>";
}
if ($rc == 0) {
addData($conn, "tmp_table(category,ttl1)", "'NON',0");
echo "Null";
}
?>
PHP SQL 服务器支持的驱动程序 sqlsrv_num_rows() function, which returns the number of rows in a result set. But you must use this function only if your call to sqlsrv_query() 使用客户端、静态或键集游标(默认为前向游标)。
让我们看一下这段代码:
if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
在 if
语句中您已经调用了 sqlsrv_fetch_array
,这意味着第一行 已经被提取 。在你的 while
循环中你做了更多 sqlsrv_fetch_array
调用 return 你的下一行(在第一行之后)。
if
语句本身(虽然必须删除)也不正确,必须用括号组成有效语句,使用!==
进行比较并写成null
总是小写:
if (($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) !== null) {