PHP SQL Server查询运行不在PHP中工作

时间:2015-01-28 09:33:48

标签: php sql sql-server

我目前有一个在MS SQL Server Management工作室中运行的查询,没有任何问题,当我在php中运行查询时它只是没有返回任何内容。

这是查询和PHP代码

     Public function GetClockedHours() {
    $conn = odbc_connect('easydo', '', '');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }
    var_dump($conn);
    $sql = " WITH ByDays AS ( 
            SELECT 
                CHINA_VISION_DorEvents.EventTm AS T,
                CONVERT(VARCHAR(10),CHINA_VISION_DorEvents.EventTm,102) AS Day,
                FLOOR(CONVERT(FLOAT,CHINA_VISION_DorEvents.EventTm)) DayNumber,
                ROW_NUMBER() OVER(PARTITION BY FLOOR(CONVERT(FLOAT,CHINA_VISION_DorEvents.EventTm)) ORDER BY CHINA_VISION_DorEvents.EventTm) InDay 
            FROM CHINA_VISION_DorEvents
            Where CHINA_VISION_DorEvents.DorCtrls_Ref = '16' AND CHINA_VISION_DorEvents.CardCode = '000006f1' AND CONVERT(Date,CHINA_VISION_DorEvents.EventTm) > dateadd(day, -7, getdate())
            )

            ,Diffs AS (
            SELECT 
                E.Day,
                E.T ET, O.T OT, O.T-E.T Diff, 
                DATEDIFF(S,E.T,O.T) DiffSeconds -- difference in seconds
            FROM 
                (SELECT BE.T, BE.Day, BE.InDay 
                 FROM ByDays BE 
                 WHERE BE.InDay % 2 = 1) E -- Even rows
            INNER JOIN
                (SELECT BO.T, BO.Day, BO.InDay 
                 FROM ByDays BO 
                 WHERE BO.InDay % 2 = 0) O -- Odd rows
            ON E.InDay + 1 = O.InDay -- Join rows (1,2), (3,4) and so on
               AND E.Day = O.Day --  in the same day
            )


            SELECT Day, 
                SUM(DiffSeconds) Seconds, 
                CONVERT(VARCHAR(8), 
                (DATEADD(S, SUM(DiffSeconds), '1900-01-01T00:00:00')),
                108) TotalHHMMSS -- The same, formatted as HH:MM:SS
            FROM Diffs GROUP BY Day
            ORDER BY Day desc  ";

    $rs = odbc_exec($conn, $sql);
    if (!$rs) {
        exit("Error in SQL");
    }else{
        echo "Get Connection";
    }
    var_dump($rs);
            var_dump($sql);
    $array = array();
    $i = 1;
    var_dump(odbc_fetch_array($rs, $i));
    while ($row = odbc_fetch_array($rs, $i)) {
        foreach ($row AS $key => $value) {
            $array[$i][$key] = $row[$key];
        }
        $i++;
    }
     var_dump($row);
    var_dump($array);
    return $array;
}

此代码的PHP部分工作,即使它不是连接到数据库的最佳方式,但是查看每个阶段返回的内容都没有返回任何内容。

当我将查询缩减到第一个选择时。

SELECT 
CHINA_VISION_DorEvents.EventTm AS T,
CONVERT(VARCHAR(10),CHINA_VISION_DorEvents.EventTm,102) AS Day,
FLOOR(CONVERT(FLOAT,CHINA_VISION_DorEvents.EventTm)) DayNumber,
ROW_NUMBER() OVER(PARTITION BY FLOOR(CONVERT(FLOAT,CHINA_VISION_DorEvents.EventTm)) ORDER BY CHINA_VISION_DorEvents.EventTm) InDay 
FROM CHINA_VISION_DorEvents
Where CHINA_VISION_DorEvents.DorCtrls_Ref = '16' AND CHINA_VISION_DorEvents.CardCode = '000006f1' AND CONVERT(Date,CHINA_VISION_DorEvents.EventTm) > dateadd(day, -7, getdate())

如果没有WITH ByDays部分,查询实际上返回了我希望它在查询的那一点返回的内容,因此使用" WITH ByDays AS("部分以及查询后面的所有内容赢得& #39;在php中工作为什么会这样,我该如何解决这个问题

0 个答案:

没有答案