我正在尝试创建一个用于在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; } } } } ?>
我不确定似乎有什么问题。但是每次我运行这个。页面上未显示任何内容。没有结果,没有数据。但是我确信数据库中有数据。
您总是得到空白页的原因是:
1. $this -> totalRows = oci_num_rows($this -> statement);
oci_num_rows()函数不会返回您可能认为的所选行数。它返回受某些DML语句(SELECT语句除外)影响的行数。因此,在您的情况下,它将始终返回0,并因此返回条件
2. if($this -> totalRows > 0)
评估为false,while将永远不会执行循环。
while
此外,oci_fetch_array()一次获取一行,如果没有更多行要返回,则返回FALSE,因此 if($this -> totalRows > 0)在您的情况下似乎是多余的。
if($this -> totalRows > 0)