我目前有一个在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中工作为什么会这样,我该如何解决这个问题