从PHP函数查询JSON

从PHP函数查询JSON,php,sql,oracle,Php,Sql,Oracle,我有一个PHP编程的序列顺序,需要从表中查询并将其插入JSON数组。我不知道我的错误在哪里,但我就是不知道。请帮帮我 在dbinfo.inc.php中 define("ORA_CON_UN", "ADMIN"); define("ORA_CON_PW", "pass"); define("ORA_CON_DB", "192.168.100.195/finance"); class db { private $conn; private $lastId; private

我有一个PHP编程的序列顺序,需要从表中查询并将其插入JSON数组。我不知道我的错误在哪里,但我就是不知道。请帮帮我

在dbinfo.inc.php中

define("ORA_CON_UN", "ADMIN");
define("ORA_CON_PW", "pass");
define("ORA_CON_DB", "192.168.100.195/finance");

class db {
    private $conn;
    private $lastId;
    private static $instance;

private function _construct(){
    $this->connect();   
}

public static function create(){
    if (!isset(self::$instance)) {
        self::$instance = new db();
    }

    return self::$instance;
}

public function connect($dbconn = ORA_CON_DB, $dbuser = ORA_CON_UN, $dbpass = ORA_CON_PW){
    $this->conn = oci_connect($dbuser, $dbpass, $dbconn);
}
}
在DBFunction.php中

include 'dbinfo.inc.php';

class Connection{
    private $dbConnection;

    public function _construct($dbConnection){
        $this->dbConnection = $dbConnection;
    }

    function initConnection(){
        $db = new db();
        $dbConnection = $db->connect(); 
    }
}

class PurchaseOrder {
    private $job = '%';
    private $subjob = '%';

    public function _construct($job, $subjob){
        $this->job = $job;
        $this->subjob = $subjob;
    }

    function listPO($job, $subjob){

        $conn = new Connection();
        $conn->initConnection();
        $sql = oci_parse($conn, 'SELECT VPI.PO_NO FROM VW_PO_INFO@WENFINANCE_WENLOGINV_LINK WHERE VPI.PROJECT_NO = ' .$job. ' AND VPI.PROJECT_NAME =  ' .$subjob);

        if (!$conn) {
            $oerr = OCIError($conn); 
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
            exit();
        } else {
            echo 'CONNECTION SUCCEDED';
        }

        $rows = array();
        while ($r = oci_fetch_assoc($sql)){
            $rows[] = $r;
        } 
        $listPO = json_encode($rows);

        oci_execute($sql);
        oci_close($conn);
    }
}
include('DBFunction.php');

$queryOracle = new PurchaseOrder();

$queryOracle->listPO('W-IGG','');

var_dump($queryOracle);
<?php
include 'dbinfo.inc.php';

// there is no need for a Connection class unless you want further wrapping or something :-/

Class PurchaseOrder {

    // ....

    public function listPO($job,$subjob){
        $db = new DbConnect();
        $conn = $DbConnect->connect();

        if (!$conn) {
            // keep your code, throw error, exit
        }
        else{
            // move all your database processing here
            $sql = oci_parse($conn, 'SELECT VPI.PO_NO FROM VW_PO_INFO...');
            // also note that you are passing an empty value for the $subjob parameter, thus making the query likely to fail
            oci_execute($sql);

            $rows = array();
            while($r = oci_fetch_assoc($sql)){
                $rows[] = $r;
            }
            $listPO = json_encode($rows);
            oci_close($conn);
        }

        return $listPO; // you need to return $listPO in order to be able to dump it
    }

    // ....
}
<?php

include('DBFunction.php');

$queryOracle = new PurchaseOrder();

// either pass what listPO() returns to a variable and dump it
$jsonResults = $queryOracle->listPO('W-IGG','');    
var_dump($jsonResults);

// or dump the return directly
// var_dump($queryOracle->listPO('W-IGG',''));
最后是testDBFunction.php

include 'dbinfo.inc.php';

class Connection{
    private $dbConnection;

    public function _construct($dbConnection){
        $this->dbConnection = $dbConnection;
    }

    function initConnection(){
        $db = new db();
        $dbConnection = $db->connect(); 
    }
}

class PurchaseOrder {
    private $job = '%';
    private $subjob = '%';

    public function _construct($job, $subjob){
        $this->job = $job;
        $this->subjob = $subjob;
    }

    function listPO($job, $subjob){

        $conn = new Connection();
        $conn->initConnection();
        $sql = oci_parse($conn, 'SELECT VPI.PO_NO FROM VW_PO_INFO@WENFINANCE_WENLOGINV_LINK WHERE VPI.PROJECT_NO = ' .$job. ' AND VPI.PROJECT_NAME =  ' .$subjob);

        if (!$conn) {
            $oerr = OCIError($conn); 
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
            exit();
        } else {
            echo 'CONNECTION SUCCEDED';
        }

        $rows = array();
        while ($r = oci_fetch_assoc($sql)){
            $rows[] = $r;
        } 
        $listPO = json_encode($rows);

        oci_execute($sql);
        oci_close($conn);
    }
}
include('DBFunction.php');

$queryOracle = new PurchaseOrder();

$queryOracle->listPO('W-IGG','');

var_dump($queryOracle);
<?php
include 'dbinfo.inc.php';

// there is no need for a Connection class unless you want further wrapping or something :-/

Class PurchaseOrder {

    // ....

    public function listPO($job,$subjob){
        $db = new DbConnect();
        $conn = $DbConnect->connect();

        if (!$conn) {
            // keep your code, throw error, exit
        }
        else{
            // move all your database processing here
            $sql = oci_parse($conn, 'SELECT VPI.PO_NO FROM VW_PO_INFO...');
            // also note that you are passing an empty value for the $subjob parameter, thus making the query likely to fail
            oci_execute($sql);

            $rows = array();
            while($r = oci_fetch_assoc($sql)){
                $rows[] = $r;
            }
            $listPO = json_encode($rows);
            oci_close($conn);
        }

        return $listPO; // you need to return $listPO in order to be able to dump it
    }

    // ....
}
<?php

include('DBFunction.php');

$queryOracle = new PurchaseOrder();

// either pass what listPO() returns to a variable and dump it
$jsonResults = $queryOracle->listPO('W-IGG','');    
var_dump($jsonResults);

// or dump the return directly
// var_dump($queryOracle->listPO('W-IGG',''));
这是我的错误信息

警告:oci_parse()期望参数1是给定的资源、对象 在第36行的C:\xampp\htdocs\WeltesFinance\pages\lib\DBFunction.php中 连接成功警告:oci_fetch_assoc()期望参数1为 是资源,在中给定null 第47行C:\xampp\htdocs\WeltesFinance\pages\lib\DBFunction.php

警告:oci_execute()要求参数1为资源,给定为null 在第52行的C:\xampp\htdocs\WeltesFinance\pages\lib\DBFunction.php中 object(PurchaseOrder)#1(2){[“作业”:“PurchaseOrder”:private]=> 字符串(1)“%”[“subjob”:“PurchaseOrder”:private]=>字符串(1)“%”

我不知道我的错误在哪里,请帮助我更新:
我对您的代码和类做了一些更新,下面是每个文件的相关更改

dbinfo.inc.php

<?php

define("ORA_CON_UN", "ADMIN");
define("ORA_CON_PW", "pass");
define("ORA_CON_DB", "192.168.100.195/finance");

Class DbConnect{
    private $user = null;
    private $password = null;
    private $db_string = null;

    public function __construct(){
        $this->user = ORA_CON_UN;
        $this->password = ORA_CON_PW;
        $this->db_string = ORA_CON_DB;
    }

    public function connect() {
        $connection = oci_pconnect($this->user, $this->password, $this->db_string);
        return $connection;
    }
}
?>
编辑:


还是一样的错误。。也许还有别的地方?我更新了答案。我稍微改变了你最初的
db
类。还要注意的是,在连接类上实际上不需要进一步的包装器。有关详细信息,请参见注释。