PostgreSQL & PHP Tutorials - Extending Your API
PHP »
Introduction to Object Oriented Programming
For a 'news' api, you'd set up something like this (of course this is an extremely simple example, in your cms you will have extra fields and options to use).
I prefer to keep each API class in separate files. This isn't necessary, but it's easier to do so you can quickly find the right code to edit.
<?php
// require our parent class.
require_once('api.php');
class News_API extends API {
/**
* These variables don't exist in the parent class, but we can use them here.
*/
var $newsid = 0;
var $title = '';
var $description = '';
/**
* Our constructor. This sets up our database connection.
* If we pass in an ID to load, it will automatically try to load that news item.
*/
function __construct($newsid=0) {
$this->SetupDB();
if ($newsid > 0) {
$this->Load($newsid);
}
}
/**
* Our constructor. This one is called by PHP4.
* We just need to pass the newsid along to the PHP5 constructor for it to automatically load.
*/
function News_API($newsid=0) {
$this->__construct($newsid);
}
/**
* This creates a news item in the database.
* It makes sure 'title' and 'description' are set before it does anything else.
*/
function Create() {
// make sure we're not going to create an empty entry.
if ($this->title == '' || $this->description == '') {
return false;
}
$query = "INSERT INTO news(title, description) VALUES('" . pg_escape_string($this->title) . "', '" . pg_escape_string($this->description) . "')";
$result = pg_query($query);
// did the query work??
if (!$result) {
return false;
}
return true;
}
/**
* This loads a news item from the database.
* If it loads ok, it sets the 'newsid', 'title' and 'description' class variables.
* It will automatically prepare the class variables for displaying on a html page.
*/
function Load($newsid=0) {
$newsid = (int)$newsid; // make sure it's an integer for loading.
if ($newsid <= 0) {
return false;
}
$query = "SELECT title, description FROM news WHERE newsid='" . $newsid . "'";
$result = pg_query($query);
if (pg_num_rows($result) <> 1) {
// found either 0 or multiple results?? that's not good.
return false;
}
$row = pg_fetch_assoc($result);
$this->title = htmlentities($row['title']);
$this->description = htmlentities($row['description']);
$this->newsid = $newsid;
return true;
}
/**
* This updates a news item in the database.
* It makes sure we have already loaded an item (we can't update something that isn't loaded).
* If it's not loaded, it will return false.
* If it has been loaded, we can update the database.
*/
function Update() {
// has the item been loaded?
// if not, we can't update it.
if ($this->newsid <= 0) {
return false;
}
$query = "UPDATE news SET title='" . pg_escape_string($this->title) . "', description='" . pg_escape_string($this->description) . "' WHERE newsid='" . $this->newsid . "'";
$result = pg_query($query);
// did the query work??
if (!$result) {
return false;
}
return true;
}
/**
* This method deletes 'this' news item from the database (based on $this->newsid)
* If it gets deleted, this returns true.
* If it can't be deleted, this returns false.
*/
function Delete() {
// has the item been loaded?
// if not, we can't delete it.
if ($this->newsid <= 0) {
return false;
}
$query = "DELETE FROM news WHERE newsid='" . $this->newsid . "'";
$result = pg_query($query);
// did the query work??
if (!$result) {
return false;
}
// reset our class variables "just in case".
$this->newsid = 0;
$this->title = '';
$this->description = '';
return true;
}
}
?>
Note that because the 'News_API' extends the base API, we don't need to create a 'Get', 'Set' or 'SetupDB' method. They exist in the parent and aren't needed in the child unless they do something different.
Avg Rating: 4
Vote Count: 10
