Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查询在PHP中不返回结果,但在Management Studio中运行良好_Php_Sql_Sql Server - Fatal编程技术网

SQL Server查询在PHP中不返回结果,但在Management Studio中运行良好

SQL Server查询在PHP中不返回结果,但在Management Studio中运行良好,php,sql,sql-server,Php,Sql,Sql Server,我有一个相当大的查询,可以在MicrosoftSQLServerManagementStudio中正常工作。然而,当我尝试在PHP中运行相同的查询时,我没有得到任何结果。这是我的代码,我知道这是连接数据库最糟糕的方式 Public function GetClockedHours() { $conn = odbc_connect('easydo', '', ''); if (!$conn) { exit("Connection Failed: " . $conn)

我有一个相当大的查询,可以在MicrosoftSQLServerManagementStudio中正常工作。然而,当我尝试在PHP中运行相同的查询时,我没有得到任何结果。这是我的代码,我知道这是连接数据库最糟糕的方式

Public function GetClockedHours() {
    $conn = odbc_connect('easydo', '', '');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }
    $sql = "WITH ByDays AS ( -- Number the entry register in each day
SELECT 
EventTm AS T,
CONVERT(VARCHAR(10),EventTm,102) AS Day,
FLOOR(CONVERT(FLOAT,EventTm)) DayNumber,
ROW_NUMBER() OVER(PARTITION BY FLOOR(CONVERT(FLOAT,EventTm)) ORDER BY EventTm) InDay 
FROM CHINA_VISION_DorEvents
Where DorCtrls_Ref = '16' AND CardCode = '000006f1' AND CONVERT(Date,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");
    }
    $array = array();
    $i = 1;
    while ($row = odbc_fetch_array($rs, $i)) {
        foreach ($row AS $key => $value) {
            $array[$i][$key] = $row[$key];
        }
        $i++;
    }
    var_dump($array);
    return $array;
} 
预期结果将是一系列结果,结果将是:

   Date    Seconds   hours
2015.01.27  18055   05:00:55
2015.01.26  33491   09:18:11
2015.01.23  32649   09:04:09
2015.01.22  31554   08:45:54
2015.01.21  31889   08:51:29

然而,我们得到的是一个一无所有的数组。

您得到了多少个结果集?如果大于1,则需要选择正确的结果集:

bool odbc_next_result ( resource $result_id )

我也有同样的问题。就我而言,我是这样执行的

$sql = "SELECT * FROM table1";
$resultSet = odbc_exec($sqllink, $sql);

while ($data = odbc_fetch_array($resultSet)) {
    $sql = "SELECT * FROM table2";
    $resultSet2 = odbc_exec($sqllink, $sql);//failed here
    while ($data2 = odbc_fetch_array($resultSet2)) {

           //something here

    }
}
我就这样改变了,而且成功了

$sql = "SELECT * FROM table1";
$resultSet = odbc_exec($sqllink, $sql);

// Create an array and store the results

$queryResult = array();

while ($data = odbc_fetch_array($resultSet)) {

    // push the required content into the array

    $queryResult[$data['id']]['name'] = $data[name];
}

foreach($queryResult as $row) {
    $sql = "SELECT * FROM table2";
    $resultSet2 = odbc_exec($sqllink, $sql);
    while ($data2 = odbc_fetch_array($resultSet2)) {

        // something here

    }
}

您应该完全提高对象的质量-databasename.schema.object您的foreach循环毫无意义。为什么不只是在。。。{$array[]=$row;}?您是否尝试打印$key和$value?为什么您希望在输出中有三个数据点,但只为数组分配$key?