我从MScost表获取数据以输入到tmp_table。 我将while循环与sqlsrv_fetch_array一起使用,以插入到tmp_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外循环粘贴时进行复制,它没有越过第一行。它正常工作。
这是为什么?我希望它能在IF中工作而不会越过第一行。我该怎么办?
答案 0 :(得分:1)
您的问题是您使用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";
}
?>
SQL Server的PHP驱动程序支持sqlsrv_num_rows()函数,该函数返回结果集中的行数。但是只有在对sqlsrv_query()的调用使用客户端,静态或键集游标(默认为前向游标)的情况下,才必须使用此功能。
答案 1 :(得分:1)
让我们看一下这段代码:
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
调用,这些调用将返回下一行(在第一行之后)。
if
语句本身(尽管必须删除)也不正确,您必须使用方括号来组成有效的语句,使用!==
进行比较,并在其中写入null
始终小写:
if (($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) !== null) {