Sample Application use Smarty: Guestbook – Part 3
/web/www.example.com/smarty/guestbook/libs/sql.lib.php
< ?php
/**
* Project: Guestbook Sample Smarty Application
* Author: Monte Ohrt <monte [AT] ohrt [DOT] com>
* Date: March 14th, 2005
* File: sql.lib.php
* Version: 1.0
*/
// define the query types
define('SQL_NONE', 1);
define('SQL_ALL', 2);
define('SQL_INIT', 3);
// define the query formats
define('SQL_ASSOC', 1);
define('SQL_INDEX', 2);
class SQL {
var $db = null;
var $result = null;
var $error = null;
var $record = null;
/**
* class constructor
*/
function SQL() { }
/**
* connect to the database
*
* @param string $dsn the data source name
*/
function connect($dsn) {
$this->db = DB::connect($dsn);
if(DB::isError($this->db)) {
$this->error = $this->db->getMessage();
return false;
}
return true;
}
/**
* disconnect from the database
*/
function disconnect() {
$this->db->disconnect();
}
/**
* query the database
*
* @param string $query the SQL query
* @param string $type the type of query
* @param string $format the query format
*/
function query($query, $type = SQL_NONE, $format = SQL_INDEX) {
$this->record = array();
$_data = array();
// determine fetch mode (index or associative)
$_fetchmode = ($format == SQL_ASSOC) ? DB_FETCHMODE_ASSOC : null;
$this->result = $this->db->query($query);
if (DB::isError($this->result)) {
$this->error = $this->result->getMessage();
return false;
}
switch ($type) {
case SQL_ALL:
// get all the records
while($_row = $this->result->fetchRow($_fetchmode)) {
$_data[] = $_row;
}
$this->result->free();
$this->record = $_data;
break;
case SQL_INIT:
// get the first record
$this->record = $this->result->fetchRow($_fetchmode);
break;
case SQL_NONE:
default:
// records will be looped over with next()
break;
}
return true;
}
/**
* connect to the database
*
* @param string $format the query format
*/
function next($format = SQL_INDEX) {
// fetch mode (index or associative)
$_fetchmode = ($format == SQL_ASSOC) ? DB_FETCHMODE_ASSOC : null;
if ($this->record = $this->result->fetchRow($_fetchmode)) {
return true;
} else {
$this->result->free();
return false;
}
}
}
?>
sql.lib.php is our database wrapper class around PEAR::DB. It will help keep the database access syntax in our application to a minimum. You can just copy and paste the above code, don’t worry too much about understanding it unless you feel inclined. Here is a crash course on the usage:
$guestbook->sql->query("select * from GUESTBOOK", SQL_ALL);
print_r($guestbook->sql->record);
OUTPUT:
Array
(
[0] => Array
(
[0] => 1
[1] => Monte
[2] => 2005-03-12 17:23:32
[3] => test entry 1
)
[1] => Array
(
[0] => 2
[1] => Monte
[2] => 2005-03-12 17:23:33
[3] => test entry 2
)
[2] => Array
(
[0] => 3
[1] => Monte
[2] => 2005-03-12 17:23:35
[3] => test entry 3
)
)
All of the guestbook entries are shown. SQL_ALL will get all of the query records.
$guestbook->sql->query("select * from GUESTBOOK");
while($guestbook->sql->next()) {
print_r($guestbook->sql->record);
}
OUTPUT:
Array
(
[0] => 1
[1] => Monte
[2] => 2005-03-12 17:23:32
[3] => test entry 1
)
Array
(
[0] => 2
[1] => Monte
[2] => 2005-03-12 17:23:33
[3] => test entry 2
)
Array
(
[0] => 3
[1] => Monte
[2] => 2005-03-12 17:23:35
[3] => test entry 3
)
This loops over the records one by one. If no second parameter is supplied to query(), then the resulting records are looped over with next().
$guestbook->sql->query("select * from GUESTBOOK", SQL_INIT);
print_r($guestbook->sql->record);
OUTPUT:
Array
(
[0] => 1
[1] => Monte
[2] => 2005-03-12 17:23:32
[3] => test entry 1
)
This outputs only one record (the first one). SQL_INIT will get one record only.
$guestbook->sql->query("select * from GUESTBOOK", SQL_INIT, SQL_ASSOC);
print_r($guestbook->sql->record);
OUTPUT:
Array
(
[id] => 1
[Name] => Monte
[EntryDate] => 2005-03-12 17:23:32
[Comment] => test entry 1
)
Passing a third parameter of SQL_ASSOC to query() will return the results as an associative array: fieldname => value.
$guestbook->sql->query("select * from GUESTBOOK");
while($guestbook->sql->next(SQL_ASSOC)) {
print_r($guestbook->sql->record);
}
OUTPUT:
Array
(
[id] => 1
[Name] => Monte
[EntryDate] => 2005-03-12 17:23:32
[Comment] => test entry 1
)
Array
(
[id] => 2
[Name] => Monte
[EntryDate] => 2005-03-12 17:23:33
[Comment] => test entry 2
)
Array
(
[id] => 3
[Name] => Monte
[EntryDate] => 2005-03-12 17:23:35
[Comment] => test entry 3
)
Passing SQL_ASSOC as a parameter to next() will also return results as an associative array.
Source: http://www.smarty.net



Comments
No comments yet.
Leave a comment