我正在尝试创建一个用于在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;
}
}
}
}
?>
我不确定什么是错的。但每次我跑这个。页面上没有显示任何内容。没有结果,没有数据。但我确信数据库有数据。
答案 0 :(得分:0)
您持续获取空白页面的原因是:
1. $this -> totalRows = oci_num_rows($this -> statement);
oci_num_rows()函数不会像您想象的那样返回所选行的数量。它返回受某些DML语句影响的行数(SELECT语句除外)。因此,在您的情况下,它将始终返回0,因此条件
2. if($this -> totalRows > 0)
评估为false,永远不会执行while
循环。
此外,oci_fetch_array()一次只能获取一行,如果没有更多行要返回,则返回FALSE,因此在您的情况下if($this -> totalRows > 0)
似乎是多余的。
答案 1 :(得分:0)
我会说,首先检查一下你的数据库连接,然后检查它是否与正确的数据库连接?检查正在选择的行数。
我建议您使用show_error()
函数来验证数据库连接。