Я пытаюсь создать класс для выполнения операционных выражений sql на PHP.
вот мой 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
цикл никогда не будет выполнен.
Кроме того, oci_fetch_array() извлекает одну строку за раз или FALSE, если больше нет строк для возврата, поэтому if($this → totalRows > 0)
в вашем случае кажется излишним.
Я бы сказал, сначала проверьте соединение с базой данных, затем проверьте, связано ли это с правой базой данных или нет? Проверьте, сколько строк выбрано.
Я рекомендую вам использовать show_error()
для проверки соединения с базой данных.