简体   繁体   English

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

[英]oracle select query with where clause returns incomplete record when run using php script

I have an sql query that runs just fine when directly run in Oracle SQL developer which shows 3k+ records.我有一个 sql 查询,当直接在显示 3k+ 记录的 Oracle SQL 开发人员中运行时,它运行得很好。 The problems comes when I run it through a php script it only shows about 20+ records please help!当我通过 php 脚本运行它时出现问题,它只显示大约 20 多条记录,请帮忙! btw both queries are used the same values for WHERE clause i also tried using order by but same results appear.顺便说一句,两个查询都使用了 WHERE 子句的相同值,我也尝试使用 order by 但出现相同的结果。

here my query:这里我的查询:

sql run in php: 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!蒂亚!

Check that you are actually connecting to the same user & DB in PHP and in SQL Developer (a common mistake).检查您是否确实在 PHP 和 SQL Developer 中连接到同一个用户和数据库(一个常见错误)。

Try adding some var_dump() calls and run the query in the command line PHP to check it works.尝试添加一些var_dump()调用并在命令行 PHP 中运行查询以检查它是否有效。

Add some error handling, see page 161 of Oracle's free book The Underground PHP and Oracle Manual .添加一些错误处理,请参阅 Oracle 免费书籍The Underground PHP and Oracle Manual 的第 161 页。

You almost certainly should be using a bind variable instead of " WHERE G.BRANCHCODE = '$branchcode'";您几乎肯定应该使用绑定变量而不是" WHERE G.BRANCHCODE = '$branchcode'"; because this is a potential, big security hole.因为这是一个潜在的大安全漏洞。 And will impact application performance and scalability.并且会影响应用程序性能和可扩展性。 Read up on oci_bind_by_name() .阅读oci_bind_by_name()

When fetching lots of rows, you can tune performance with oci_set_prefetch() .获取大量行时,您可以使用oci_set_prefetch()调整性能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM