WeberDev.com PHP and MySQL Code

LOG IN
BEGINNER GUIDES  |  PHP CLASSES  |  CODE SEARCH  |  ARTICLES SEARCH  |  PHP FORUMS  |  PHP MANUAL  |  PHP FUNCTIONS LIST  |  WEB SITE TEMPLATES
Start typing to search for PHP and MySQL Code Snippets and Articles Search
Submit a code Example / Snippet Submit Your Code
Search Engine Optimization Monitor SEO Monitor
Web Site UpTime Monitor UpTime Monitor
WeberDev's Monthly code contest PHP Code Contest
Your Personal Examples List My Favorite Examples
Your Personal Articles List My Favorite Articles
Edit Account Info Update Your Profile
PHP Code Search
Web Development Forums
Learn MySQL Playing Trivia
PHPBB2 Templates
Web Development Index
Web Development Resources
Web Development Content
PHPClasses
PHP Editor
PHP Jobs
Vision.To Design
Ajax Tutorials
PHP Programming Help
PHP/MySQL Programming
Webmaster Resources
Webmaster Forum
XML meta language
website builder
Mobile Dev World

Go Back Add a Comment Send this example to a friend Add this Article to your personal favoritest for easy future access to your favorite Code Examples and Articles. Submit a code example Print this code example.
BACK ADD A COMMENT SEND TO A FRIEND ADD TO MY FAVORITES ADD CODE EXAMPLES PRINT
Title : DbObject - A PHP wrapper for working with various databases
Categories : Databases, PHP, PHP Classes Click here to Update Your Picture
Simon Belak
Date : Feb 17th 2001
Grade : 2 of 5 (graded 2 times)
Viewed : 5798
File : db_object.php
Images : No Images for this code example.
Search : More code by Simon Belak
Action : Grade This Code Example
Tools : My Examples List

  Submit your own code examples 
 

<?php

//
***************************************************************************
********************************
//
//        Name:                 Database PHP Object
//        Version:                 1.0
//        Description:        A PHP wrapper for working with various databases
//        Compatibility:        PHP3, PHP4
//        
//        Author:                 Simon Belak
//        E-mail:                Simon_Belak@yahoo.com
//        
//        Last Modified:        01/12/2001
//        
//        Copyright (c) Simon Belak
//        All rights reserved.
//                
//        This Software is distributed under the GPL. For a list of your obligations and rights
//        under this license please visit the GNU website at http://www.gnu.org/
//
//
***************************************************************************
********************************

class DbObject
{

//
***************************************************************************
********************************
// *** (private) variables ***        
//
***************************************************************************
********************************

        var $mDbType                = '';        // Server (currently supported:
MySQL,ODBC and MSSQL)

        var $mCaseFolding                = TRUE;         // Set this to false for easier field accessing,
but with a bit of a preformance hit
                                        // see function GetField for details
                
        var $mLink_ID                 = 0;         // Link identifier of the currently opened
connection
        var $mQuery_ID                 = 0;         // Result indenifier of the last query
        
        var $EOF                        = TRUE;        // End Of File (recordset)
        var $BOF                        = TRUE; // Begining Of File (reocrdset)
        
        var $mRecord                 = array(); // Current record
        var $mCurrentRow                = -1;        // Current row
        
        var $mNumRows                = -1;        // Number of rows in the recordset
        var $mNumFields                = -1;        // Number of fields in the recordset
        var $mFieldNames                = array();        // Names of fields in the recordset


//
***************************************************************************
********************************
// *** Constructor ***        
//
***************************************************************************
********************************

        function DbObject($dbType='',$host='',$dbName='',$user='',$password='')
        {
                if (''==$dbType && ''==$this->mDbType)
                {
                        $this->_Halt('Server is not selected');
                }
                else if (''==$dbType)
                {
                        $dbType=$this->mDbType;
                }
                else
                {
                        $this->mDbType=$dbType;
                } // if
                
                $this->Connect($host,$dbName,$user,$password);
        } // DbObject - constructor
        

//
***************************************************************************
********************************
// *** Public functions ***        
//
***************************************************************************
********************************
                        
        function SelectServer($dbType='',$host='',$dbName='',$user='',$password='')
        {
                if (''==$dbType)
                {
                        $this->_Halt('Server is not selected');
                        return FALSE;
                }
                
                return $this->_ResetConnection
($dbType,$host,$dbName,$user,$password);
        } // SelectServer
        
        function SelectHost($host='',$dbName='',$user='',$password='')
        {
                if (''==$host)
                {
                        $this->_Halt('Host is not selected');
                        return FALSE;
                } // if
                
                return $this->_ResetConnection($this-
>mDbType,$host,$dbName,$user,$password);
        } // SelectHost
                
        function SelectDb($dbName='',$user='',$password='')
        {        
                if (''==$dbName)
                {
                        $this->_Halt('Database name is not set');
                        return FALSE;
                } // if
                                        
                $this->FreeResult();
                                
                if (FALSE==$this->_db_select_db($dbName,$user,$password))
                {
                        $this->_Halt('Error using database: '.$dbName);
                        return FALSE;
                } // if
                
                return TRUE;
        } // SelectDb
        
        function Connect($host='',$dbName='',$user='',$password='')
        {
                if ( 0 == $this->mLink_ID )
                {
                        $this->mLink_ID=$this->_db_connect($host,$user,$password);
                
                        if (FALSE==$this->mLink_ID)
                        {
                                $this->_Halt('mLink_ID == FALSE, connect failed');
                                return FALSE;
                        } // if
                        
                        if ($dbName!='')
                        {
                                $this->SelectDb($dbName,$user,$password);
                        }
                } // if
                
                return $this->mLink_ID;
        } // Connect
        
        function Close()
        {
                $status=TRUE;
                
                if ( 0 != $this->mLink_ID && FALSE != $this->mLink_ID)
                {
                        $this->FreeResult();
                        $status=$this->_db_close();
                        $this->mLink_ID = 0;
                } // if
                
                return $status;
        } // Close
        
        function FreeResult()
        {
                $status=TRUE;
                
                if (0 != $this->mQuery_ID && FALSE != $this->mQuery_ID)
                {
                        $this->mRecord = array();
                        $this->mCurrentRow = -1;
                        $this->mNumRows = -1;
                        $this->mNumFields = -1;
                        $this->mFieldNames = array();
                        
                        $this->BOF=TRUE;
                        $this->EOF=TRUE;
                        
                        $status=$this->_db_free_result();
                        $this->mQuery_ID = 0;
                } // if
                
                return $status;
        } // FreeResult
        
        function Query($query='')
        {
                $this->Connect();                        
                $this->FreeResult();
                                                        
                $this->mQuery_ID = $this->_db_query($query);                

                if (FALSE==$this->mQuery_ID)
                {
                        $this->_Halt('Invalid SQL: '.$query);
                        return FALSE;
                }                
                else if (1==$this->mQuery_ID)
                {
                        $this->mQuery_ID=0;
                }
                else
                {                        
                        $this->mNumRows = $this->_db_num_rows();
                        $this->mNumFields = $this->_db_num_fields();
                        $this->mFieldNames = $this->_SetFieldNames();
                        
                        $this->BOF=TRUE;
                        if (0 < $this->mNumRows)
                        {
                                $this->EOF=FALSE;
                        }
                        else
                        {
                                $this->EOF=TRUE;
                        } // if
                } // if
                                
                return $this->mQuery_ID;
        } // Query

        function GoToRecord($pos=0)
        {
                $status=TRUE;
                
                if ($pos > $this->mNumRows-1)
                {
                        $this->mCurrentRow = -1;
                        $this->EOF=TRUE;
                        $status=FALSE;
                }
                else if ($pos < 0)
                {
                        $this->mCurrentRow = -1;
                        $this->BOF=TRUE;
                        $status=FALSE;
                }
                else
                {
                        if ($pos !=$this-> mCurrentRow+1)        // Optimization: if we
move one record forward, data_seek isn't needed
                        {
                                if (FALSE == $this->_db_data_seek($pos))        //
Unexpected error
                                {
                                        return FALSE;
                                } // if
                        } // if
                        
                        $this->mCurrentRow = $pos;
                        $this->mRecord = $this->_db_fetch_array();
                        $status = is_array($this->mRecord);        // Unexpected error

                        $this->BOF=FALSE;
                        $this->EOF=FALSE;
                } // if
                
                return $status;                
        } // GoToRecord

        function GetField($index=0)
        {
                if (FALSE != $this->EOF || FALSE != $this->BOF)
                {
                        return FALSE;
                } // if
                
                if (FALSE == $this->mCaseFolding && FALSE != is_string($index))
                {
                        $index = strtoupper($index);
                        
                        reset($this->mFieldNames);
                        while (list(,$name)=each($this->mFieldNames))
                        {
                                if (strtoupper($name) == $index)
                                {
                                        $index=$name;
                                        BREAK;
                                } // if
                        } // while
                } // if
                
                if (FALSE==isset($this->mRecord[$index]))
                {
                        return FALSE;
                } // if
                
                return $this->mRecord[$index];
        } // GetField
                
        function NextRecord()
        {                                
                return $this->GoToRecord($this->mCurrentRow + 1);
        } // NextRecord

        function PreviousRecord()
        {
                return $this->GoToRecord($this->mCurrentRow-1);
        } // PreviousRecord
        
        function GoToRecordRelative($pos=0)
        {
                return $this->GoToRecord($this->mCurrentRow+$pos);
        } // GoToRecordRelative
        
        function FirstRecord()
        {
                return $this->GoToRecord(0);
        } // FirstRecord
        
        function LastRecord()
        {
                return $this->GoToRecord($this->mNumRows-1);
        } // LastRecord
        
        function GetNumFields()
        {
                if (-1==$this->mNumFields)
                {
                        $this->mNumFields = $this->_db_num_fields();
                } // if
                
                return $this->mNumFields;
        } // GetNumFields
        
        function GetNumRows()
        {
                if (-1==$this->mNumRows)
                {
                        $this->mNumRows = $this->_db_num_rows();
                } // if
                
                return $this->mNumRows;
        } // GetNumRows
        
        function GetFieldNames($pos=-1)
        {
                if (1 > count($this->mFieldNames))
                {
                        $this->_SetFieldNames();
                } // if
                
                if (-1< $pos && count($this->mFieldNames) > $pos)
                {
                        return $this->mFieldNames[$pos];
                }
                else
                {
                        return $this->mFieldNames;
                } // if
        } // GetFieldNames
        
        function SetCaseFolding($val=TRUE)
        {
                $this->mCaseFolding=$val;
                return TRUE;
        } // SetCaseFolding
                

//
***************************************************************************
********************************
// *** Private functions ***        
//
***************************************************************************
********************************

        function _Halt($msg='')
        {
                $this->Close();

                printf("</td></tr></table><b>Error:</b> %s<br>\n", $msg); // we
escape the html table so that Netscape (and other browsers) can display this page properly
                die('Session halted.');
                
                return TRUE;
        } // _Halt        

        function _ResetConnection($dbType='',$host='',$dbName='',$user='',$password='')
        {
                $this->Close();                        
                                
                $this->mDbType=$dbType;
                $this->Connect($host,$dbName,$user,$password);
                        
                if ( 0 == $this->mLink_ID || FALSE == $this->mLink_ID)
                {
                        return FALSE;
                } // if
                
                return TRUE;
        } // _ResetConnection

        function _SetFieldNames()
        {
                for ($i=0;$i<$this->mNumFields;$i++)
                {
                        $this->mFieldNames[]=$this->_db_field_name($i);
                } // for
                
                return $this->mFieldNames;
        } // _SetFieldNames


//
***************************************************************************
********************************
// *** Functios that unify database accessing ***
//
***************************************************************************
********************************

        function _db_connect($host='',$user='',$password='')
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_connect($host, $user, $password);
                        case 'ODBC':
                                // odbc_connect doesn't accept the argument host,
and is therefore (in functionalaty) the same as select_db,
                                // so we just skip the connect step and call
odbc_connect in select_db step
                                return TRUE;
                        case 'MSSQL':
                                 return mssql_connect($host, $user, $password);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_connect
        
        function _db_close()
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_close($this->mLink_ID);
                        case 'ODBC':        
                                return odbc_close($this->mLink_ID);
                        case 'MSSQL':
                                return mssql_close($this->mLink_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_close
        
        function _db_select_db($dbName='',$user='',$password='')
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_select_db($dbName,$this->mLink_ID);
                        case 'ODBC':
                                // See _db_connect case "ODBC" for details        
                                $this->mLink_ID=odbc_connect($dbName, $user,
$password,SQL_CUR_USE_ODBC);
                        
                                if (FALSE==$this->mLink_ID)
                                {
                                        return FALSE;
                                }
                                else
                                {
                                        return TRUE;
                                } // if
                        case 'MSSQL':
                                return mssql_select_db($dbName,$this->mLink_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_select_db
                
        function _db_free_result()
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_free_result($this->mQuery_ID);
                        case 'ODBC':
                                return odbc_free_result($this->mQuery_ID);
                        case 'MSSQL':
                                return mssql_free_result($this->mQuery_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_free_result
                
        function _db_query($query='')
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                        {
                                $temp_query_id=mysql_query($query,$this-
>mLink_ID);
                                
                                // Becouse for queries DELETE, INSERT, REPLACE and
UPDATE mysql doesn't return a result indenifier
                                // We (in those cases) set the result indenifier to 1,
so we can distict it from a failed query
                                if (FALSE==$temp_query_id && 0 <
mysql_affected_rows($this->mLink_ID))
                                {        
                                        $temp_query_id = 1;
                                } // if
                                
                                return $temp_query_id;
                        } // case 'MySQL'
                        case 'ODBC':
                                return odbc_exec($this->mLink_ID,$query);
                        case 'MSSQL':
                                return mssql_query($query,$this->mLink_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_query
        
        function _db_fetch_array()
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_fetch_array($this->mQuery_ID);
                        case 'ODBC':         // A unfied result:
                        {                // Record is returned in an array with
numeric keys and field names for keys
                                        // Row and field counting start is set to 0
(ODBC default is 1)
                                if (FALSE != odbc_fetch_row($this->mQuery_ID,$this-
>mCurrentRow+1))
                                {
                                        $resultArray = array();

                                        for ($i=0;$i < odbc_num_fields($this-
>mQuery_ID);$i++)
                                        {
                                                $name=odbc_field_name($this-
>mQuery_ID,$i+1);
                                                $resultArray[$name]=null;
                                                unset($resultArray[$name]);        
        // isset() function now returns false, but the field name key stays
                                                if (FALSE != odbc_result($this-
>mQuery_ID,$i+1))
                                                {        
                                                        $resultArray[$i]=
($resultArray[$name] = odbc_result($this->mQuery_ID,$i+1));
                                                } // if
                                        } // for
                                        
                                        return $resultArray;
                                }
                                else
                                {
                                        return FALSE;
                                } // if
                        } // case 'ODBC'
                        case 'MSSQL':
                                return mssql_fetch_array($this->mQuery_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_fetch_array
        
        function _db_data_seek($pos=0)
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_data_seek($this->mQuery_ID, $pos);
                        case 'ODBC':        
                                // No need to move the internal pointer becouse we
provide the optional row_number argument for odbc_fatch_row
                                return TRUE;
                        case 'MSSQL':
                                return mssql_data_seek($this->mQuery_ID, $pos);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_data_seek
        
        function _db_num_rows()
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_num_Rows($this->mQuery_ID);
                        case 'ODBC':
                        {
                                $numRows=odbc_num_Rows($this->mQuery_ID);
                                
                                // Some ODBC drivers don't support odbc_num_rows
for results of an SELECT query and return an error (-1)
                                if (-1==$numRows)        
                                {
                                        // Optimization: first we roughly estemate
the number of rows
                                        // than the last 9 are counted
                                        for ($i=0;FALSE != odbc_fetch_Row($this-
>mQuery_ID,$i+10);$i+=10);
                                        for ($numRows=$i+1;FALSE !
=odbc_fetch_Row($this->mQuery_ID,$numRows+1);$numRows++);
                                        odbc_fetch_Row($this->mQuery_ID,$this-
>mCurrentRow);        // We set the internal pointer back to where we started
                                } // if
                                
                                return $numRows;
                        } // case 'ODBC'
                        case 'MSSQL':
                                return mssql_num_Rows($this->mQuery_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_num_rows
        
        function _db_num_fields()
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_num_fields($this->mQuery_ID);
                        case 'ODBC':        
                                return odbc_num_fields($this->mQuery_ID);
                        case 'MSSQL':
                                return mssql_num_fields($this->mQuery_ID);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_num_fields
        
        function _db_field_name($fieldNumber=0)
        {
                switch (strtoupper($this->mDbType))
                {
                        case 'MYSQL':
                                return mysql_field_name($this->mQuery_ID ,
$fieldNumber);
                        case 'ODBC':        
                                return odbc_field_name($this->mQuery_ID ,
$fieldNumber+1);
                        case 'MSSQL':
                                return mssql_field_name($this->mQuery_ID ,
$fieldNumber);
                        default:
                                $this->_Halt('Server is not selected');
                                return FALSE;
                } // switch
        } // _db_field_name
} // class


//
***************************************************************************
********************************
//
// *** Class DbObject ***
//
// Public variables:        0
//
// Private variables:        11
//                        
//                        $mDbType        Server (currently supported: MySQL,ODBC
and MSSQL)
//
//                        $mCaseFolding        Set this to false for easier field accessing,
but with a bit of a preformance hit
//                                        see function GetField for details
//                
//                        $mLink_ID         Link identifier of the currently opened
connection
//                        $mQuery_ID         Result indenifier of the last query
//        
//                        $EOF                End Of File (recordset)
//                        $BOF                Begining Of File (reocrdset)
//        
//                        $mRecord         Current record
//                        $mCurrentRow        Current row
//        
//                        $mNumRows        Number of rows in the recordset
//                        $mNumFields        Number of fields in the recordset
//                        $mFieldNames        Names of fields in the recordset
//
// Custom cunstuctor: yes (DbObject)
//
// Public functions: 18
//
//                        SelectServer
($dbType='',$host='',$dbName='',$user='',$password='')
//                        SelectHost($host='',$dbName='',$user='',$password='')
//                        SelectDb($dbName='',$user='',$password='')
//                        
//                        Connect($host='',$dbName='',$user='',$password='')
//                        Close()
//                        
//                        FreeResult()
//                        
//                        Query($query='')
//                        
//                        GoToRecord($pos=0)
//                        GoToRecordRelative($pos=0)
//                        NextRecord()
//                        PreviousRecord()
//                        FirstRecord()
//                        LastRecord()
//        
//                        GetField($index=0)
//        
//                        GetNumFields()
//                        GetNumRows()
//                        GetFieldNames($pos=-1)
//        
//                        SetCaseFolding($val=TRUE)
//        
// Private functions: 3
//                
//                        _Halt($msg='')
//                        _ResetConnection
($dbType='',$host='',$dbName='',$user='',$password='')
//                        _SetFieldNames()
//
// Special: yes - Functios that unify database accessing
//
//                        _db_connect($host='',$user='',$password='')
//                        _db_close()
//                        _db_select_db($dbName='',$user='',$password='')
//                        _db_free_result()
//                        _db_query($query='')
//                        _db_fetch_array()
//                        _db_data_seek($pos=0)
//                        _db_num_rows()
//                        _db_num_fields()
//                        _db_field_name($fieldNumber=0)
//        
//
//
// *** Example: ***
//
// 1.         $db1 = new DbObject("Mysql","host","database","user","password");
//
// 2.         $db1->Query("select * from mytable1");
//
// 3.         while ($db1->NextRecord())
// 4.         {
// 5.                for ($i=0;$i<$db1->GetNumFields();$i++)
// 6.                {
// 7.                        echo $db1->GetField($i);
// 8.                }
// 9.        }
//
// 10.        $db1->FirstRecord();
// 11.        echo $db1->GetField("fieldname1");
//
// 12.        $db1->SetCaseFolding(FALSE);
// 13.        echo $db1->GetField("fiELDnaME1");
//
//
***************************************************************************
********************************

?>



PHP5 SQLite Abstraction class
Categories : PHP, PHP Classes, SQLite, Databases
The Ajax Tree view class fetches data from a db for the requested parent category id. The data is then stored in an array and converted into JSON (Javascript Object Notation) format. This format is then used by JavaScript for populating tree view.
Categories : PHP, PHP Classes, Java Script, AJAX, Databases
PostGreSQL and MySQL 2 in 1 db Manager
Categories : PHP, PHP Classes, Databases, PostgreSQL, MySQL
[PHP5] aDB PDO LIKE Database Abstraction. Switch easily from one db server to another, strong errors management, manage transactions, queries preparation and more.
Categories : PHP, PHP Classes, Databases, MS SQL Server, MySQL
Simple class to create insert and update statements. Independent of the access to the database. Makes handling complex inserts easier - especially when the table structure is liable to change.
Categories : Databases, PHP Classes, PHP
Password reminder
Categories : PHP, PHP Classes, Databases, MySQL, Mail
MySQL Connection/Query Class
Categories : Databases, MySQL, PHP, PHP Classes
Simple class for accessing databases like MSSql Server, Oracle etc by Raju
Categories : PHP, MS SQL Server, Databases, PHP Classes, Oracle
Specify your connection settings and create a link to a MySQL database.
Categories : PHP, PHP Classes, Databases, MySQL, Beginner Guides
Online Automatic Class Generator for MySQL Tables
Categories : PHP, PHP Classes, Classes and Objects, Databases, MySQL
MySQL Class to ease Database connectivity
Categories : MySQL, PHP Classes, Databases, PHP
DBE - Database Expander: Edit PostgreSQL individual database tables online via your Web browser!
Categories : PostgreSQL, Complete Programs, Databases, PHP Classes, PHP
SQLite PHP Database Wrapper
Categories : PHP, PHP Classes, Databases, SQLite, Beginner Guides
ADODB Database Wrapper Abstraction Library for PHP: MySQL, MSSQL, Oracle, Interbase,ODBC, Microsoft Access and FoxPro.
Categories : PHP Classes, Databases, PHP, General SQL, ODBC
phpFormGenerator for Dynamic Form Generation from MySQL
Categories : PHP, PHP Classes, MySQL, Databases, HTML and PHP
 Mike Myers wrote : 562
cool
 
 carlos peņaranda wrote :567
The article is good, El articulo es bueno. lo adaptare para postgresql, thank you.