PHP 5.4到7.4 mssql到sqlsrv sql查询未运行

PHP 5.4到7.4 mssql到sqlsrv sql查询未运行,php,sql,sql-server,sqlsrv,php-mssql,Php,Sql,Sql Server,Sqlsrv,Php Mssql,我是一名一年级的系统管理员,我一直在迁移服务器,以使公司跟上时代。我遇到了一个运行PHP5.4的服务器,我正试图将其迁移到PHP7.4。所有内容最初都是用mssql编写的,我现在将其移动到sqlsrv。我已经接通了。我可以成功地执行一些查询,但我无法获得为mssql编写的用于sqlsrv的查询 我知道的事情: $record作为一个数组返回,我用gettype测试了这个数组。 $conn之所以有效,是因为我可以通过简单的查询从数据库中查询表。 sql查询在sql server中正确运行 任何建议

我是一名一年级的系统管理员,我一直在迁移服务器,以使公司跟上时代。我遇到了一个运行PHP5.4的服务器,我正试图将其迁移到PHP7.4。所有内容最初都是用mssql编写的,我现在将其移动到sqlsrv。我已经接通了。我可以成功地执行一些查询,但我无法获得为mssql编写的用于sqlsrv的查询

我知道的事情:

$record作为一个数组返回,我用gettype测试了这个数组。 $conn之所以有效,是因为我可以通过简单的查询从数据库中查询表。 sql查询在sql server中正确运行

任何建议都将不胜感激,因为我觉得我需要重写整个脚本,因为我已经为此挣扎了几天了。下面的代码片段只是构建在if-else链中的许多查询之一

用PHP5.4编写的原始代码:

我试图做的是:

我已经开始使用PDO,但我的一台服务器仍然使用sqlsrv函数。当我从mssql函数转换时,遇到了与您相同的问题

您可以像上面提到的那样使用sqlsrv_next_result函数移动指针,也可以简单地提供一个附加参数,强制将结果作为关联数组返回。我发现标准while循环的工作原理与旧函数一样,当它以这种方式完成时

而不是:

while ($record = sqlsrv_fetch_array($result))
使用:


日志中有错误吗?不运行不是一个很好的描述。自从我加入MSSQL以来,已经有很长时间了。我看到两个查询,是否需要使用sqlsrv_next_result$result跳过第一个查询?您可能还应该在调试过程中检查sqlsrv_rows_impact$result!这就是问题所在!!谢谢你的提示,我不认为它们是两个独立的查询,也不知道sqlsrv_next_结果。为什么不切换到PDO?
$query = "Select * INTO #temptable FROM (
    SELECT Employee
        ,transdate
        ,sum([RegHrs]) as RegHrs
        ,sum([OvtHrs]) as OvtHrs
    
    FROM [dbo].[tkDetail]
    WHERE TransDate >= cast('" . $startdate . "' as datetime) and TransDate <= cast('" . $enddate . "' as datetime)
    GROUP BY Employee, transdate) as x

    SELECT LastName,FirstName,emmain.Employee, emcom.PayType, cast(data.TransDate as date) as TransDate
    ,data.reghrs
    ,data.ovthrs
    from dbo.emmain emmain
    Left Join #temptable data on emmain.employee = data.employee
    Left Join dbo.EMCompany emcom on emmain.employee = emcom.employee
    Left Join dbo.EmployeeCustomTabFields custom on emmain.employee = custom.employee
    WHERE custom.custFullTimePartTime = 'Full Time' and emcom.status = 'A'
    ";

    $result = sqlsrv_query($conn, $query);
    if( $result ) {
        echo "result true";
    }else{
        echo "result false <br />";
        die( print_r( sqlsrv_errors(), true));
    }    
    while ($record = sqlsrv_fetch_array($result)) 
        {
            
        // BUGFIX: Salary reporting shows no regular hour entry as null instead of 0.0
        if ($record["reghrs"] == null) {
            $record["reghrs"] = "0.0";
        }
        
        
        // BUGFIX: Salary reporting shows no overtime hour entry as null instead of 0.0
        if ($record['ovthrs'] == null) {
            $record['ovthrs'] = "0.0";
        }
        
        if (($record['reghrs'] + $record['ovthrs'] <= 4) && ($record['reghrs'] + $record['ovthrs'] > -1)) {
            print "\t\t\t\t\t<tr>\n";
            print "\t\t\t\t\t\t<td>" . $record['Employee'] . "</td>\n";
            print "\t\t\t\t\t\t<td>" . $record['FirstName'] . " " . $record['LastName'] . "</td>\n";
            print "\t\t\t\t\t\t<td>" . $record['PayType'] . "</td>\n";
            print "\t\t\t\t\t\t<td>" . number_format((float) $record['reghrs'], 3) . "</td>\n";
            print "\t\t\t\t\t\t<td>" . number_format((float) $record['ovthrs'], 3) . "</td>\n";
            print "\t\t\t\t\t\t<td>" . $record['TransDate'] . "</td>\n";
            print "\t\t\t\t\t</tr>\n";
            $reccount += 1;
        }
    }


while ($record = sqlsrv_fetch_array($result))
while ($record = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))