2

PHPでOracle SQLステートメントを実行するためのクラスを作成しようとしています。

これが私の関数を呼び出そうとしている私のindex.phpです

 <?php  
    include "dbaseconn/dbcontrol.php";
    $DbControl = new DbControl;
    $DbControl->execute(" SELECT * FROM SAMPLE_TABLE");
        foreach($DbControl->data as $items)
        {
         echo $items['SAMPLE_COLUMN_NAME'];
        }
?>

そして私の機能のための私のdbcontrol.php

<?php
class DbControl{
    public $dbstr ='(DESCRIPTION = 
                (ADDRESS_LIST = 
                            (ADDRESS = (COMMUNITY = tcp.world)(PROTOCOL = TCP)(HOST = XX.XXX.XXX.XX)(PORT = XXXX))
                    )
                    (CONNECT_DATA = 
                      (SID = XXXXX)
                    )
                  )';

        public $user = "XXXXX";
        public $password = "XXXXX";

        function connect(){
            $this->connection = oci_connect($this->user,$this->password,$this->dbstr) or die(oci_error());
        }

    function execute($query){
        $this -> connect(); //Database Connect
        $this -> statement = oci_parse($this->connection,$query); //prepare the statement
        $this -> execute = oci_execute($this -> statement); //execute the statement
        $this -> totalRows = oci_num_rows($this -> statement); //get total number of rows
        $this -> data = array();
        if($this -> totalRows > 0){
                            //fetch data
                while($result = oci_fetch_array($this->statement)){
                    $this -> data[] = $result;
                }
        }
    }   
}   

?>

何が間違っているように見えるのかわかりません。しかし、私はこれを実行するたびに. ページには何も表示されません。結果なし、データなし。しかし、データベースにはデータがあると確信しています。

4

2 に答える 2

1

空白のページが表示され続ける理由は次のとおりです。

1. $this -> totalRows = oci_num_rows($this -> statement);

oci_num_rows()関数は、ご想像のとおり、選択された行の数を返しません。一部の DML ステートメント (SELECT ステートメントを除く) の影響を受けた行数を返します。したがって、あなたの場合、常に 0 が返され、その結果として条件が返されます

2. if($this -> totalRows > 0) 

false と評価され、whileループは実行されません。

その上、oci_fetch_array()は一度に1行ずつフェッチするか、返す行がもうない場合は FALSE をフェッチするため if($this -> totalRows > 0)、あなたの場合は冗長に見えます。

于 2013-07-22T08:28:38.470 に答える
0

最初にデータベース接続を確認してから、正しいデータベースに接続されているかどうかを確認してください。選択されている行数を確認します。

show_error()関数を使用してデータベース接続を検証することをお勧めします 。

于 2013-07-22T08:38:08.523 に答える