如何在另一个文件中从php调用oracle函数?

如何在另一个文件中从php调用oracle函数?,php,oracle,function,Php,Oracle,Function,请不要将它标记为重复,因为我已经尝试了所有的解决方案,但没有得到我真正想要的 下面是我的querys.php class Queries { public static function getNames($name=":name") { $dbUser = "..."; $dbPass = "..."; $dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=)(PORT=))(CONN

请不要将它标记为重复,因为我已经尝试了所有的解决方案,但没有得到我真正想要的

下面是我的querys.php

class Queries {

public static function getNames($name=":name") {
        $dbUser = "...";
        $dbPass = "...";
        $dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SID=)))";  
        $conn = oci_connect($dbUser, $dbPass, $dbConn);
        $sql = oci_parse($conn, "SELECT NAME FROM USERS GROUP BY NAME");
        oci_bind_by_name($sql, ':name', $name);
        oci_execute($sql);
        $results = array();
        while ( false!==($row=oci_fetch_all($sql)) ) {
            $results[ $row[$name] ] = $row;
        }
        return $results;
}
profile.php

<?php
error_reporting(E_ALL);
$name = filter_input(INPUT_GET, 'NAME');
require_once './pages/header.php';
require_once './queries.php';
$department = Queries::getNames($name);
?>
<div class="container">
    <div class="panel panel-default">
        <div class="panel-body">
            <form class="cmxform" id="selectdept" method="POST">
        <legend></legend>
        <label for="department"></label>
        <select class="form-control" name="Id" id="Id">
            <option selected disabled></option>
           <?php

            for ($i = 0; $i < count($department); $i++) {
                echo '<option value="' . $department[$i]['NAME'] . '">' . $department[$i]['NAME'] . '</option>';
            }
            ?>
           </select>   
    </form> 
            <br>
            <br>

        </div>    
    </div>
</div>

<?php
require_once './pages/footer.php';
?>




在这里,我想在for循环中调用querys.php中的函数。这对我来说毫无意义

您对
oci\u fetch\u all
的工作原理做出了错误的假设。读取显示它需要两个参数,一个语句对象和一个用于存储结果的数组变量

重复已有的结果是没有意义的,因为您应该只调用一次函数来接收所有行。正如您所写的,PHP将进入一个无限循环,因为
oci\u fetch\u all
永远不会返回布尔值
false

您还没有在SQL查询中包含
:name
占位符

PHP错误日志应该充满警告,所以,一如既往,检查这应该是调试的第一步

class Queries {
    public static function getNames($name=":name") {
        $dbUser = "...";
        $dbPass = "...";
        $dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SID=)))";  
        $conn = oci_connect($dbUser, $dbPass, $dbConn);
        $sql = oci_parse($conn, "SELECT NAME FROM USERS WHERE NAME = :name GROUP BY NAME");
        oci_bind_by_name($sql, ':name', $name);
        oci_execute($sql);
        $results = array();
        oci_fetch_all($sql, $results, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);

        return $results;
    }
}

获取此错误:PHP致命错误:未捕获错误:调用/home/web/querys.PHP:13\n堆栈跟踪:\n#0/home/web/profile.PHP(17):querys::getNames(':name')\n#1{main}\n在第13行的/home/web/querys.PHP中抛出,
prepare()
在本页问题和答案的任何代码中。检查
/home/web/querys.php
的第13行。它似乎不是您粘贴到这里的代码的一部分;profile.php中的第17行是$department=querys::getNames(':name');线路。