https://github.com/floorin/oracle_php
Of course, you need to have enabled OCI8 php extension. The library is under development and the goal is to be ready until December 1, 2019 + Wiki pages.
After the loadModel() call, results an object that contains the columns of the table as property, and the following methods: findFirst(), find(), next(), exportAsArray(), create(), update(), delete(), beginTransaction(), rollback(), fetchTable(), checkIfIsNull(), commit(), reset() and of course sql_query().
Very basic examples how to use.
Oracle table:
CREATE TABLE EMPLOYEE (EMPNO NUMBER NOT NULL, FIRSTNAME VARCHAR(30) NOT NULL, LASTNAME VARCHAR(30) NOT NULL, BIRTHDATE NOT NULL, HIREDATE NOT NULL, JOB VARCHAR(30) NOT NULL, SALARY NUMBER(7,2) )
Create php file “EmployeeModel.php”:
<?php require('path_to_\OCIdb.php'); class EmployeeModel extends OCIdb{ public function setSource(){ $this->_table_name='employee'; } } ?>
Create php file “EmployeeController.php”:
<?php require('EmployeeModel.php'); $OCIDB=new OCIdb(); $employeeTable=$OCIDB->loadModel('EmployeeModel'); $employeeTable->empno=123; $employeeTable->firstname='Florin'; $employeeTable->lastname='Florin'; $employeeTable->setDataFormat('dd.mm.yyyy'); $employeeTable->birthdate='10.05.1971'; if(!$employeeTable->create('commit')){ $status="error"; $messages = $employeeTable->_error_message; }else{ $status="success"; } ?>
Another basic example:
<?php require('EmployeeModel.php'); $OCIDB=new OCIdb(); $employeeTable=$OCIDB->loadModel('EmployeeModel'); $employeeTable->findFirst([ 'conditions' => 'empno = :vempno', 'bind' => [ ":vempno" => 123 ] ]); $employeeTable->lastname='Codreanu'; if(!$employeeTable->update('commit')){ $status="error"; $messages = $employeeTable->_error_message; }else{ $status="success"; } ?>
Exporting json:
<?php require('EmployeeModel.php'); $OCIDB=new OCIdb(); $response = new stdClass(); $response->status="getting salary greather than 1000"; $employeeTable=$OCIDB->loadModel('EmployeeModel'); $employeeTable->find([ 'conditions' => 'salary>1000', 'order by' =>'salary desc' ]); $response->rows=$employeeTable->exportAsArray(); die(json_encode($response)); ?>
Just stupid playing around:
<?php require('EmployeeModel.php'); $OCIDB=new OCIdb(); $employeeTable=$OCIDB->loadModel('EmployeeModel'); $employeeTable->find([ 'conditions' => 'lastname like :vlastname', 'bind' => [ ":vlastname" => 'JOHN%' ], 'order by'=>'firstname asc' ]); if($employeeTable->rowExists && $employeeTable->empno==123) { $employeeTable->lastname='Codreanu'; $employeeTable->update(); } $employeeTable->next(); if($employeeTable->rowExists && $employeeTable->lastname='test';) { $employeeTable->delete(); } if($employeeTable->next())//or we can check if next() is still getting data { $employeeTable->setDataFormat('dd.mm.yyyy'); $employeeTable->birthdate='25.05.1971'; $employeeTable->update(); } $employeeTable->commit(); ?>
Adding a bit of complexity declaring the model (“EmployeeModel.php”):
<?php require('path_to_\OCIdb.php'); class EmployeeModel extends OCIdb{ public function setSource(){ $this->_table_name='employee'; } public function initialize() { //set format data $this->setDataFormat('dd.mm.yyyy'); //skip selecting some columns $this->skipAttributes(['hiredate','salary']); //skip some columns on INSERT operation $this->skipAttributesOnCreate(['empno']); //skip some columns on UPDATE operation $this->skipAttributesOnUpdate(['empno','firstname']); } /* of course, you can redeclare, for instance, an insert/update/delete or whatever parent's method in this model and implement your validations. */ } ?>
Nice, but can you provide a documentation?