带有where子句的oracle select查询,当使用php脚本运行时返回不完整的记录

问题描述 投票:0回答:1

我有一个sql查询,当直接在显示3k +记录的Oracle SQL Developer中运行时,它运行得很好。问题来了,当我通过php脚本运行它时,它仅显示大约20多个记录,请帮助!顺便说一句,两个查询都为WHERE子句使用了相同的值,我也尝试使用order by,但是出现了相同的结果。

这里是我的查询:

sql在php中运行:

function getAllCOBDataList() 
{
            $branchcode = $_SESSION['branchcode'];
            $officeId = $_SESSION['officeid'];
            //$expenseFilter = $_SESSION['earmark-expenseCode'];
            $cob_data_list = array();

            $conn = persistentDBConnect();

            $query = "WITH CTE_TotalBalance AS (Select BUDGETID ,sum(TOTALCOST)"
                   . " as CURRENT_BALANCE from (Select BUDGETID, TOTALCOST from"
                   . " FARU.BEMM_DATA_COB"
                   . " Union all"
                   . " Select BUDGETID, EARMARKAMOUNT "
                   . " from FARU.BEMM_TRANS_EARMARKINGLIST)"
                   . " GROUP BY BUDGETID)"
                   . "SELECT"
                   . " A.FYEAR, A.BUDGETID, A.PERSPECTIVEID as perspective, A.FUNDTYPE, A.PARTICULAR, A.TOTALCOST,"
                   . " A.Q1UNITS, A.Q2UNITS, A.Q3UNITS, A.Q4UNITS,"
                   . " B.PERSPECTIVEID, B.PERSPECTIVEDESC,"
                   . " C.BPAID, C.BPADESC,"
                   . " D.INITIATIVEID, D.INITIATIVEDESC,"
                   . " E.STOBID, E.STOBDESC,"
                   . " F.TARGETID, F.TARGETDESC,"
                   . " G.OFFICEID, G.BRANCHCODE, G.PPACODE, G.PPADESC,"
                   . " H.SUBOFFICEID, H.SUBPPADESC,"
                   . " I.EXPCODE, I.EXPCODEDESC,"
                   . " J.EXPENSECLASS, J.EXPENSEDESC,"
                   . " K.CURRENT_BALANCE"
                   . " FROM"
                   . " FARU.BEMM_DATA_COB A"
                   . " INNER JOIN FARU.BEMM_LIB_PERSPECTIVE B ON A.PERSPECTIVEID = B.PERSPECTIVEID"
                   . " INNER JOIN FARU.BEMM_LIB_BPAS C ON A.BPAID = C.BPAID"
                   . " INNER JOIN FARU.BEMM_LIB_INITIATIVE D ON A.INITIATIVEID = D.INITIATIVEID"
                   . " INNER JOIN FARU.BEMM_LIB_STOB E ON A.STOBID = E.STOBID"
                   . " INNER JOIN FARU.BEMM_LIB_TARGET F ON A.TARGETID = F.TARGETID"
                   . " INNER JOIN FARU.BEMM_LIB_PPALIST G ON A.OFFICEID = G.OFFICEID"
                   . " INNER JOIN FARU.BEMM_LIB_SUBPPALIST H ON A.SUBOFFICEID = H.SUBOFFICEID"
                   . " INNER JOIN FARU.BEMM_LIB_EXPCODE I ON A.EXPENSECODE = I.EXPCODE"
                   . " INNER JOIN FARU.BEMM_LIB_EXPENSELIST J ON A.EXPENSECLASS = J.EXPENSECLASS"
                   . " INNER JOIN FARU.CTE_TotalBalance K ON A.BUDGETID = K.BUDGETID"
                   . " WHERE G.BRANCHCODE = '$branchcode'";
                  // . " WHERE G.OFFICEID = '$officeId'"
                   //. " Order by A.BUDGETID Asc";
            //echo $query;
            $stmt = oci_parse($conn, $query);
            $result =oci_execute($stmt);

            while($result = oci_fetch_assoc($stmt)){
                $cob_data_list[] = $result;
            }
            return $cob_data_list;


}

TIA!

php sql oracle
1个回答
0
投票

检查您是否确实在PHP和SQL Developer中连接到相同的用户和数据库(常见错误)。>>

[尝试添加一些var_dump()调用并在PHP命令行中运行查询以检查其是否正常。

添加一些错误处理,请参见Oracle的免费书籍The Underground PHP and Oracle Manual的第161页。

您几乎可以肯定应该使用绑定变量而不是" WHERE G.BRANCHCODE = '$branchcode'";,因为这是一个潜在的大安全漏洞。并且会影响应用程序的性能和可伸缩性。阅读oci_bind_by_name()

[获取大量行时,可以使用oci_bind_by_name()调整性能。

© www.soinside.com 2019 - 2024. All rights reserved.