Üyelik sistemi için gerekli database sınıfı:
class database { 
    var $_sql=''; 
    var $_errorNum=0; 
    var $_errorMsg=''; 
    var $_table_prefix=''; 
    var $_resource=''; 
    var $_cursor=null; 
    function database( $host='localhost', $user, $pass, $db, $table_prefix ) { 
        // perform a number of fatality checks, then die gracefully 
        if (!function_exists( 'mysql_connect' )) { 
            //or die( 'FATAL ERROR: MySQL support not available.  Please check your configuration.' ); 
            $mosSystemError = 1; 
            include "configuration.php"; 
            include "offline.php"; 
            exit(); 
        } 
        if (!($this->_resource = @mysql_connect( $host, $user, $pass ))) { 
            //or die( 'FATAL ERROR: Connection to database server failed.' ); 
            $mosSystemError = 1; 
            include "configuration.php"; 
            include "offline.php"; 
            exit(); 
        } 
        if (!mysql_select_db($db)) { 
            //or die( "FATAL ERROR: Database not found. Operation failed with error: ".mysql_error()); 
            $mosSystemError = 1; 
            include "configuration.php"; 
            include "offline.php"; 
            exit(); 
        } 
        $this->_table_prefix = $table_prefix; 
    } 
    function openConnectionWithReturn($query){ 
        $result=mysql_query($query) or die("Query failed with error: ".mysql_error()); 
        return $result; 
    } 
    function openConnectionNoReturn($query){ 
        mysql_query($query) or die("Query failed with error: ".mysql_error()); 
    } 
    function getErrorNum() { 
        return $this->_errorNum; 
    } 
    function getErrorMsg() { 
        return str_replace( array( "\n", "'" ), array( '\n', "\'" ), $this->_errorMsg ); 
    } 
    function getEscaped( $text ) { 
        return mysql_escape_string( $text ); 
    } 
    function setQuery( $sql, $prefix='#__' ) { 
        $this->_sql = str_replace( $prefix, $this->_table_prefix, $sql ); 
    } 
    /** 
    * @return string The current value of the internal SQL vairable 
    */ 
    function getQuery() { 
        return "<pre>" . htmlspecialchars( $this->_sql ) . "</pre>"; 
    } 
    /** 
    * Execute the query 
    * @return mixed A database resource if successful, FALSE if not. 
    */ 
    function query() { 
        $this->_errorNum = 0; 
        $this->_errorMsg = ''; 
        $this->_cursor = mysql_query( $this->_sql, $this->_resource ); 
        if (!$this->_cursor) { 
            $this->_errorNum = mysql_errno( $this->_resource ); 
            $this->_errorMsg = mysql_error( $this->_resource )." SQL=$this->_sql"; 
            return false; 
        } 
        return $this->_cursor; 
    } 
    function query_batch( $abort_on_error=true, $p_transaction_safe = false) { 
        $this->_errorNum = 0; 
        $this->_errorMsg = ''; 
        if ($p_transaction_safe) { 
            $si = mysql_get_server_info(); 
            preg_match_all( "/(\d+)\.(\d+)\.(\d+)/i", $si, $m ); 
            if ($m[1] >= 4) { 
                $this->_sql = 'START TRANSACTION;' . $this->_sql . '; COMMIT;'; 
            } else if ($m[2] >= 23 && $m[3] >= 19) { 
                $this->_sql = 'BEGIN WORK;' . $this->_sql . '; COMMIT;'; 
            } else if ($m[2] >= 23 && $m[3] >= 17) { 
                $this->_sql = 'BEGIN;' . $this->_sql . '; COMMIT;'; 
            } 
        } 
        $query_split = preg_split ("/[;]+/", $this->_sql); 
        $error = 0; 
        foreach ($query_split as $command_line) { 
            $command_line = trim( $command_line ); 
            if ($command_line != '') { 
                $this->_cursor = mysql_query( $command_line, $this->_resource ); 
                if (!$this->_cursor) { 
                    $error = 1; echo 'xxx '; 
                    $this->_errorNum .= mysql_errno( $this->_resource ) . ' '; 
                    $this->_errorMsg .= mysql_error( $this->_resource )." SQL=$command_line <br />"; 
                    if ($abort_on_error) { 
                        return $this->_cursor;; 
                    } 
                } 
            } 
        } 
        return $error ? false : true; 
    } 
    /** 
    * Diagnostic function 
    */ 
    function explain() { 
        $temp = $this->_sql; 
        $this->_sql = "EXPLAIN $this->_sql"; 
        $this->query(); 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $first = true; 
        $buf = "<table cellspacing=\"1\" cellpadding=\"2\" border=\"0\" bgcolor=\"#000000\" align=\"center\">"; 
        $buf .= $this->getQuery(); 
        while ($row = mysql_fetch_assoc( $cur )) { 
            if ($first) { 
                $buf .= "<tr>"; 
                foreach ($row as $k=>$v) { 
                    $buf .= "<th bgcolor=\"#ffffff\">$k</th>"; 
                } 
                $buf .= "</tr>"; 
                $first = false; 
            } 
            $buf .= "<tr>"; 
            foreach ($row as $k=>$v) { 
                $buf .= "<td bgcolor=\"#ffffff\">$v</td>"; 
            } 
            $buf .= "</tr>"; 
        } 
        $buf .= "</table><br />&nbsp;"; 
        mysql_free_result( $cur ); 
        $this->_sql = $temp; 
        return "<div style=\"background-color:#FFFFCC\" align=\"left\">$buf</div>"; 
    } 
    function getNumRows( $cur=null ) { 
        return mysql_num_rows( $cur ? $cur : $this->_cursor ); 
    } 
    function loadResult() { 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $ret = null; 
        if ($row = mysql_fetch_row( $cur )) { 
            $ret = $row[0]; 
        } 
        mysql_free_result( $cur ); 
        return $ret; 
    } 
    /** 
    * Load an array of single field results into an array 
    */ 
    function loadResultArray($numinarray = 0) { 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $array = array(); 
        while ($row = mysql_fetch_row( $cur )) { 
            $array[] = $row[$numinarray]; 
        } 
        mysql_free_result( $cur ); 
        return $array; 
    } 
    function loadObject( &$object ) { 
        if ($object != null) { 
            if (!($cur = $this->query())) { 
                return false; 
            } 
            if ($array = mysql_fetch_assoc( $cur )) { 
                mysql_free_result( $cur ); 
                mosBindArrayToObject( $array, $object ); 
                return true; 
            } else { 
                return false; 
            } 
        } else { 
            if ($cur = $this->query()) { 
                if ($object = mysql_fetch_object( $cur )) { 
                    mysql_free_result( $cur ); 
                    return true; 
                } else { 
                    $object = null; 
                    return false; 
                } 
            } else { 
                return false; 
            } 
        } 
    } 
    function loadObjectList( $key='' ) { 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $array = array(); 
        while ($row = mysql_fetch_object( $cur )) { 
            if ($key) { 
                $array[$row->$key] = $row; 
            } else { 
                $array[] = $row; 
            } 
        } 
        mysql_free_result( $cur ); 
        return $array; 
    } 
    /** 
    * @return The first row of the query. 
    */ 
    function loadRow() { 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $ret = null; 
        if ($row = mysql_fetch_row( $cur )) { 
            $ret = $row; 
        } 
        mysql_free_result( $cur ); 
        return $ret; 
    } 
    function loadRowList( $key='' ) { 
        if (!($cur = $this->query())) { 
            return null; 
        } 
        $array = array(); 
        while ($row = mysql_fetch_row( $cur )) { 
            if ($key) { 
                $array[$row->$key] = $row; 
            } else { 
                $array[] = $row; 
            } 
        } 
        mysql_free_result( $cur ); 
        return $array; 
    } 
    function insertObject( $table, &$object, $keyName = NULL, $verbose=false ) { 
        $fmtsql = "INSERT INTO $table ( %s ) VALUES ( %s ) "; 
        foreach (get_object_vars( $object ) as $k => $v) { 
            if (is_array($v) or is_object($v) or $v == NULL) { 
                continue; 
            } 
            if ($k[0] == '_') { // internal field 
            continue; 
            } 
            $fields[] = "`$k`"; 
            $values[] = "'" . $this->getEscaped( $v ) . "'"; 
        } 
        $this->setQuery( sprintf( $fmtsql, implode( ",", $fields ) ,  implode( ",", $values ) ) ); 
        ($verbose) && print "$sql<br />\n"; 
        if (!$this->query()) { 
            return false; 
        } 
        $id = mysql_insert_id(); 
        ($verbose) && print "id=[$id]<br />\n"; 
        if ($keyName && $id) { 
            $object->$keyName = $id; 
        } 
        return true; 
    } 
    function updateObject( $table, &$object, $keyName, $updateNulls=true ) { 
        $fmtsql = "UPDATE $table SET %s WHERE %s"; 
        foreach (get_object_vars( $object ) as $k => $v) { 
            if( is_array($v) or is_object($v) or $k[0] == '_' ) { // internal or NA field 
            continue; 
            } 
            if( $k == $keyName ) { // PK not to be updated 
            $where = "$keyName='" . $this->getEscaped( $v ) . "'"; 
            continue; 
            } 
            if ($v === NULL && !$updateNulls) { 
                continue; 
            } 
            if( $v == '' ) { 
                $val = "''"; 
            } else { 
                $val = "'" . $this->getEscaped( $v ) . "'"; 
            } 
            $tmp[] = "`$k`=$val"; 
        } 
        $this->setQuery( sprintf( $fmtsql, implode( ",", $tmp ) , $where ) ); 
        return $this->query(); 
    } 
    function getObjectList( $index=null, $maxrows=NULL ) { 
        $this->_errorNum = 0; 
        $this->_errorMsg = ''; 
        if (!($cur = mysql_query( $this->_sql ))) {; 
        $this->_errorNum = mysql_errno(); 
        $this->_errorMsg = mysql_error(); 
        return false; 
        } 
        $list = array(); 
        $cnt = 0; 
        while ($obj = mysql_fetch_object( $cur )) { 
            if ($index) { 
                $list[$obj->$index] = $obj; 
            } else { 
                $list[] = $obj; 
            } 
            if( $maxrows && $maxrows == $cnt++ ) { 
                break; 
            } 
        } 
        mysql_free_result( $cur ); 
        return $list; 
    } 
    /** 
    * @param boolean If TRUE, displays the last SQL statement sent to the database 
    * @return string A standised error message 
    */ 
    function stderr( $showSQL = false ) { 
        return "DB function failed with error number $this->_errorNum" 
        ."<br /><font color=\"red\">$this->_errorMsg</font>" 
        .($showSQL ? "<br />SQL = <pre>$this->_sql</pre>" : ''); 
    } 
    function insertid() 
    { 
        return mysql_insert_id(); 
    } 
    function getVersion() 
    { 
        return mysql_get_server_info(); 
    } 
    function GenID( $foo1=null, $foo2=null ) { 
        return '0'; 
    } 
} 
class mosDBTable { 
    var $_tbl = ''; 
    var $_tbl_key = ''; 
    var $_error = ''; 
    var $_db = null; 
    function mosDBTable( $table, $key, &$db ) { 
        $this->_tbl = $table; 
        $this->_tbl_key = $key; 
        $this->_db = $db; 
    } 
    /** 
    *    @return string Returns the error message 
    */ 
    function getError() { 
        return $this->_error; 
    } 
    function get( $_property ) { 
        if(isset( $this->$_property )) { 
            return $this->$_property; 
        } else { 
            return null; 
        } 
    } 
    /** 
    * Set the value of the class variable 
    * @param string The name of the class variable 
    * @param mixed The value to assign to the variable 
    */ 
    function set( $_property, $_value ) { 
        $this->$_property = $_value; 
    } 
    function bind( $array, $ignore="" ) { 
        if (!is_array( $array )) { 
            $this->_error = get_class( $this )."::bind failed."; 
            return false; 
        } else { 
            return mosBindArrayToObject( $array, $this, $ignore ); 
        } 
    } 
    /** 
    *    binds an array/hash to this object 
    *    @param int $oid optional argument, if not specifed then the value of current key is used 
    *    @return any result from the database operation 
    */ 
    function load( $oid=null ) { 
        $k = $this->_tbl_key; 
        if ($oid !== null) { 
            $this->$k = $oid; 
        } 
        $oid = $this->$k; 
        if ($oid === null) { 
            return false; 
        } 
        $this->_db->setQuery( "SELECT * FROM $this->_tbl WHERE $this->_tbl_key='$oid'" ); 
        return $this->_db->loadObject( $this ); 
    } 
    function check() { 
        return true; 
    } 
    /** 
    * Inserts a new row if id is zero or updates an existing row in the database table 
    * 
    * Can be overloaded/supplemented by the child class 
    * @param boolean If false, null object variables are not updated 
    * @return null|string null if successful otherwise returns and error message 
    */ 
    function store( $updateNulls=false ) { 
        $k = $this->_tbl_key; 
        global $migrate; 
        if( $this->$k && !$migrate) { 
            $ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, $updateNulls ); 
        } else { 
            $ret = $this->_db->insertObject( $this->_tbl, $this, $this->_tbl_key ); 
        } 
        if( !$ret ) { 
            $this->_error = get_class( $this )."::store failed <br />" . $this->_db->getErrorMsg(); 
            return false; 
        } else { 
            return true; 
        } 
    } 
    /** 
    */ 
    function move( $dirn, $where='' ) { 
        $k = $this->_tbl_key; 
        $sql = "SELECT $this->_tbl_key, ordering FROM $this->_tbl"; 
        if ($dirn < 0) { 
            $sql .= "\nWHERE ordering < $this->ordering"; 
            $sql .= ($where ? "\n    AND $where" : ''); 
            $sql .= "\nORDER BY ordering DESC\nLIMIT 1"; 
        } else if ($dirn > 0) { 
            $sql .= "\nWHERE ordering > $this->ordering"; 
            $sql .= ($where ? "\n    AND $where" : ''); 
            $sql .= "\nORDER BY ordering\nLIMIT 1"; 
        } else { 
            $sql .= "\nWHERE ordering = $this->ordering"; 
            $sql .= ($where ? "\n    AND $where" : ''); 
            $sql .= "\nORDER BY ordering\nLIMIT 1"; 
        } 
        $this->_db->setQuery( $sql ); 
        $row = null; 
        if ($this->_db->loadObject( $row )) { 
            print_r($row); 
            $this->_db->setQuery( "UPDATE $this->_tbl SET ordering='$row->ordering'" 
            . "\nWHERE $this->_tbl_key='".$this->$k."'" 
            ); 
            $this->_db->query(); 
            $this->_db->setQuery( "UPDATE $this->_tbl SET ordering='$this->ordering'" 
            . "\nWHERE $this->_tbl_key='".$row->$k."'" 
            ); 
            $this->_db->query(); 
            $this->ordering = $row->ordering; 
        } else { 
            $this->_db->setQuery( "UPDATE $this->_tbl SET ordering='$this->ordering'" 
            . "\nWHERE $this->_tbl_key='".$this->$k."'" 
            ); 
            $this->_db->query(); 
        } 
    } 
    function updateOrder( $where='' ) { 
        $k = $this->_tbl_key; 
        if (!array_key_exists( 'ordering', get_class_vars( get_class( $this ) ) )) { 
            $this->_error = "WARNING: ".get_class( $this )." does not support ordering."; 
            return false; 
        } 
        if ($this->_tbl == "#__content_frontpage") { 
            $order2 = ", content_id DESC"; 
        } else { 
            $order2 = ""; 
        } 
        $this->_db->setQuery( "SELECT $this->_tbl_key, ordering FROM $this->_tbl" 
        . ($where ? "\nWHERE $where" : '') 
        . "\nORDER BY ordering".$order2 
        ); 
        if (!($orders = $this->_db->loadObjectList())) { 
            $this->_error = $this->_db->getErrorMsg(); 
            return false; 
        } 
        // first pass, compact the ordering numbers 
        for ($i=0, $n=count( $orders ); $i < $n; $i++) { 
            if ($orders[$i]->ordering > 0) { 
                $orders[$i]->ordering = $i+1; 
            } 
        } 
        $shift = 0; 
        $n=count( $orders ); 
        for ($i=0; $i < $n; $i++) { 
            //echo "i=$i id=".$orders[$i]->$k." order=".$orders[$i]->ordering; 
            if ($orders[$i]->$k == $this->$k) { 
                // place 'this' record in the desired location 
                $orders[$i]->ordering = min( $this->ordering, $n ); 
                $shift = 1; 
            } else if ($orders[$i]->ordering >= $this->ordering && $this->ordering > 0) { 
                $orders[$i]->ordering++; 
            } 
        } 
        // compact once more until I can find a better algorithm 
        for ($i=0, $n=count( $orders ); $i < $n; $i++) { 
            if ($orders[$i]->ordering > 0) { 
                $orders[$i]->ordering = $i+1; 
                $this->_db->setQuery( "UPDATE $this->_tbl" 
                . "\nSET ordering='".$orders[$i]->ordering."' WHERE $k='".$orders[$i]->$k."'" 
                ); 
                $this->_db->query(); 
                //echo $this->_db->getQuery(); 
            } 
        } 
        // if we didn't reorder the current record, make it last 
        if ($shift == 0) { 
            $order = $n+1; 
            $this->_db->setQuery( "UPDATE $this->_tbl" 
            . "\nSET ordering='$order' WHERE $k='".$this->$k."'" 
            ); 
            $this->_db->query(); 
        } 
        return true; 
    } 
    function canDelete( $oid=null, $joins=null ) { 
        $k = $this->_tbl_key; 
        if ($oid) { 
            $this->$k = intval( $oid ); 
        } 
        if (is_array( $joins )) { 
            $select = "$k"; 
            $join = ""; 
            foreach( $joins as $table ) { 
                $select .= ",\nCOUNT(DISTINCT {$table['idfield']}) AS {$table['idfield']}"; 
                $join .= "\nLEFT JOIN {$table['name']} ON {$table['joinfield']} = $k"; 
            } 
            $this->_db->setQuery( "SELECT $select\nFROM $this->_tbl\n$join\nWHERE $k = ".$this->$k." GROUP BY $k" ); 
            if ($obj = $this->_db->loadObject()) { 
                $this->_error = $this->_db->getErrorMsg(); 
                return false; 
            } 
            $msg = array(); 
            foreach( $joins as $table ) { 
                $k = $table['idfield']; 
                if ($obj->$k) { 
                    $msg[] = $AppUI->_( $table['label'] ); 
                } 
            } 
            if (count( $msg )) { 
                $this->_error = "noDeleteRecord" . ": " . implode( ', ', $msg ); 
                return false; 
            } else { 
                return true; 
            } 
        } 
        return true; 
    } 
    function delete( $oid=null ) { 
        //if (!$this->canDelete( $msg )) { 
        //    return $msg; 
        //} 
        $k = $this->_tbl_key; 
        if ($oid) { 
            $this->$k = intval( $oid ); 
        } 
        $this->_db->setQuery( "DELETE FROM $this->_tbl WHERE $this->_tbl_key = '".$this->$k."'" ); 
        if ($this->_db->query()) { 
            return true; 
        } else { 
            $this->_error = $this->_db->getErrorMsg(); 
            return false; 
        } 
    } 
    function checkout( $who, $oid=null ) { 
        if (!array_key_exists( 'checked_out', get_class_vars( get_class( $this ) ) )) { 
            $this->_error = "WARNING: ".get_class( $this )." does not support checkouts."; 
            return false; 
        } 
        $k = $this->_tbl_key; 
        if ($oid !== null) { 
            $this->$k = $oid; 
        } 
        $time = date( "%Y-%m-%d H:i:s" ); 
        if (intval( $who )) { 
            // new way of storing editor, by id 
            $this->_db->setQuery( "UPDATE $this->_tbl" 
            . "\nSET checked_out='$who', checked_out_time='$time'" 
            . "\nWHERE $this->_tbl_key='".$this->$k."'" 
            ); 
        } else { 
            // old way of storing editor, by name 
            $this->_db->setQuery( "UPDATE $this->_tbl" 
            . "\nSET checked_out='1', checked_out_time='$time', editor='".$who."' " 
            . "\nWHERE $this->_tbl_key='".$this->$k."'" 
            ); 
        } 
        return $this->_db->query(); 
    } 
    function checkin( $oid=null ) { 
        if (!array_key_exists( 'checked_out', get_class_vars( get_class( $this ) ) )) { 
            $this->_error = "WARNING: ".get_class( $this )." does not support checkin."; 
            return false; 
        } 
        $k = $this->_tbl_key; 
        if ($oid !== null) { 
            $this->$k = $oid; 
        } 
        $time = date("H:i:s"); 
        $this->_db->setQuery( "UPDATE $this->_tbl" 
        . "\nSET checked_out='0', checked_out_time='0000-00-00 00:00:00'" 
        . "\nWHERE $this->_tbl_key='".$this->$k."'" 
        ); 
        return $this->_db->query(); 
    } 
    function hit( $oid=null ) { 
        global $mosConfig_enable_log_items; 
        $k = $this->_tbl_key; 
        if ($oid !== null) { 
            $this->$k = intval( $oid ); 
        } 
        $this->_db->setQuery( "UPDATE $this->_tbl SET hits=(hits+1) WHERE $this->_tbl_key='$this->id'" ); 
        $this->_db->query(); 
        if (@$mosConfig_enable_log_items) { 
            $now = date( "Y-m-d" ); 
            $this->_db->setQuery( "SELECT hits" 
            . "\nFROM #__core_log_items" 
            . "\nWHERE time_stamp='$now' AND item_table='$this->_tbl' AND item_id='".$this->$k."'" 
            ); 
            $hits = intval( $this->_db->loadResult() ); 
            if ($hits) { 
                $this->_db->setQuery( "UPDATE #__core_log_items SET hits=(hits+1)" 
                . "\nWHERE time_stamp='$now' AND item_table='$this->_tbl' AND item_id='".$this->$k."'" 
                ); 
                $this->_db->query(); 
            } else { 
                $this->_db->setQuery( "INSERT INTO #__core_log_items VALUES" 
                . "\n('$now','$this->_tbl','".$this->$k."','1')" 
                ); 
                $this->_db->query(); 
            } 
        } 
    } 
    function save( $source, $order_filter ) { 
        if (!$this->bind( $_POST )) { 
            return false; 
        } 
        if (!$this->check()) { 
            return false; 
        } 
        if (!$this->store()) { 
            return false; 
        } 
        if (!$this->checkin()) { 
            return false; 
        } 
        $filter_value = $this->$order_filter; 
        $this->updateOrder( $order_filter ? "`$order_filter`='$filter_value'" : "" ); 
        $this->_error = ''; 
        return true; 
    } 
    function publish_array( $cid=null, $publish=1, $myid=0 ) { 
        if (!is_array( $cid ) || count( $cid ) < 1) { 
            $this->_error = "No items selected."; 
            return false; 
        } 
        $cids = implode( ',', $cid ); 
        $this->_db->setQuery( "UPDATE $this->_tbl SET published='$publish'" 
        . "\nWHERE id IN ($cids) AND (checked_out=0 OR (checked_out='$myid'))" 
        ); 
        if (!$this->_db->query()) { 
            $this->_error = $this->_db->getErrorMsg(); 
            return false; 
        } 
        if (count( $cid ) == 1) { 
            $this->checkin( $cid[0] ); 
        } 
        $this->_error = ''; 
        return true; 
    } 
}
bu sınıfın kullanımına örnek:

include_once( "members/kutuphane/database.php" ); 
 $db = new database( $config["sql_host"], $config["sql_username"], $config["sql_password"], $config["sql_database"], "" ) or die( "Veri tabanı Bağlanma Hatası" );