Xlquiz 0.1.1 > Classes / Mysql.class.php

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Xlquiz 0.1.1

Download:
xlquiz-0.1.1.zip

Category:
Tests And Quiz

Archive Content:

Xlquiz 0.1.1

Xlquiz 0.1.1 > Docs

Xlquiz 0.1.1 > Cache

Xlquiz 0.1.1 > Css

Xlquiz 0.1.1 > Lang

Xlquiz 0.1.1 > Db

Xlquiz 0.1.1 > Templates

Xlquiz 0.1.1 > Classes

Xlquiz 0.1.1 > Classes > Excel

Mysql.class.php:


<?php
/******************************************************************************
 * classi algseks autoriks on php.ee kasutaja stepz
 * http://php.ee/foorum/index.php?post=12085
 *
 * Tehtud muudatused ja täiendused <lauri_k <at> mail <dot> ru>
 * -----------------------------------------------------------------------------
 * 20.07.2003 - fiksitud bug seoses viimase errori näitamisega (funktsioonis puudus "SQL::")
 * 21.07.2003 02:00 - lisatud funktsioon hosti,  kasutajanime ja parooli korraga saatmiseks
 * 02.08.2003 14:03 - fixitud bug funktsioonis _pass()
 * 29.10.2004 18:18 - php5 compatible + muudetud setConnData funktiooni
 * 25.06.2005 20:47 - otsast peale ümberkirjutatud,  tehtud lihtsamaks ning lühemaks
 * 19.07.2005 20:08 - esceipimisele lisatud case magic quotesei puhuks
 *****************************************************************************/

class SQL
{
    
/**
     * Ühendumine andmebaasiga
     * nt: SQL::connect('mysql://user:pass <at> localhos <dot> /db');
     */

    
function connect($path)
    {
        
$url parse_url($path);
        
$pass = isset($url['pass']) ? $url['pass'] : '';

        
SQL::mem('driver',  $url['scheme']);
        
SQL::mem('host',  $url['host']);
        
SQL::mem('user',  $url['user']);
        
SQL::mem('pass',  $pass);
        
SQL::mem('db',  substr($url['path'],  1));

        
SQL::_connect();
        
SQL::_selectDB();
    }

    
/**
     * Tagastab ühe rea SELECT päringust välja nimede järgi indekseeritud
     * massiivis või FALSE vea korral
     * 
     * Vaikimisi esimese rea,  mittekohustuslik parameeter on rea indeks
     */
    
function getAssoc($Query,  $Row 0)
    {
        
$t SQL::microtime();

        
$res = @mysql_query($Query,  SQL::mem('conn'));
        if (!
$res
        {
            
SQL::_debug("Get row query failed for '$Query': " SQL::_MySQLerror()); 
            return 
false;
        }

        if (@
mysql_num_rows($res) < ($Row 1))
        {
            
SQL::_debug("Get row query failed for '$Query': row $Row requested,  ". <atmysql_num_row <dot> ($res)." available"); return false
        }

        if (!@
mysql_data_seek($res,  $Row)) 
        {
            
SQL::_debug("Get row query failed to seek to row for '$Query': "SQL::_MySQLerror());
            return 
false;
        }
        
$row = @mysql_fetch_assoc($res);
        @
mysql_free_result($res);

        
$time SQL::microtime() - $t;
        
SQL::_debug('getAssoc: ' $Query,  $time );

        return 
$row;
    }

    
/**
     * Tagastab massiivi,  mille võtmeks on SELECT päringust üks väli ja
     * väärtuseks teine väli
     * Kui päring ei anna ühtegi rida,  siis tagastab tühja massiivi.
     * 
     * Vaikimisi võtmeks esimene väli,  väärtuseks teine väli
     */
    
function getAssocList($Query,  $KeyField 0,  $ValueField 1)
    {
        
$t SQL::microtime();
        
$res = @mysql_query($Query,  SQL::mem('conn'));

        if (!
$res)
        {
            
SQL::_debug("Get list query failed for '$Query': "SQL::_MySQLerror()); 
            return 
false
        }

        if (@
mysql_num_fields($res) < (max($KeyField,  $ValueField)+1))
        {
            
SQL::_debug("Get associative list query failed for '$Query': field ".max($KeyField,  $ValueField)." requested,  ". <atmysql_num_field <dot> ($res)." available");
            return 
false;
        }

        
$list = array();
        while (
$row = @mysql_fetch_row($res))
        {
            
$list[$row[$KeyField]] = $row[$ValueField];
        }

        @
mysql_free_result($res);

        
$time SQL::microtime() - $t;
        
SQL::_debug('getAssocList: ' $Query,  $time );

        return 
$list;        
    }

    
/**
     * Tagastab kogu SELECT päringu kahemõõtmelises massiivis/tulemuse objektis
     * või FALSE vea korral.
     * Vaikimisi on ridade massiivid välja nime järgi indekseeritud
     * Teine parameeter võib omada konstandi väärtusi:
     *        SQL_NUMERIK            väljad on numbriliselt indekseeritud
     *        SQL_ASSOC            väljad on välja nime järgi indekseeritud
     *        SQL_RESULTOBJECT    tagastab objekti,  vt. allpool
     *
     * Kui päring ei anna ühtegi rida,  siis tagastab tühja massiivi,  .
     */    
    
function &getAll($Query,  $Type 1)
    {
        
$t SQL::microtime();

        
$res = @mysql_query($Query,  SQL::mem('conn'));
        if (!
$res)
        {
            
SQL::_debug("Get all query failed for '$Query': "SQL::_MySQLerror());
            return 
false;
        }

        
$arr = array();

        switch (
$Type)
        {
            case 
0:
                while(
$row = @mysql_fetch_row($res)) $arr[] = $row;
                    @
mysql_free_result($res);
            break;
            
            case 
1:
                while(
$row = @mysql_fetch_assoc($res)) $arr[] = $row;
                    @
mysql_free_result($res);
            break;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('getAll: ' $Query,  $time );

        return 
$arr;        
    }
    
    
/**
     * Tagastab SELECT päringu,  mille väljanimesid on töödeldud
     * Parameetrid on
     *        Päring,  string
     *            SELECT päring,  mida töödelda
     *        Väljade vastavus,  array
     *            array("Nimi massiivis" => "Otsitav väli",  ...)
     *            Otsitav väli on kas numbriline indeks päringusse
     *            või välja nimi
     *        Alamgrupi definitsioon,  array,  mittekohustuslik
     *            array("grupi nimi" => array("Nimi massiivis" => "Otsitav väli",  ...))
     *        Grupeerimise väljad,  array,  mittekohustuslik
     *            array("väli mille järgi grupeerida")
     *
     *    Näide:
     *        SQL::map(
     *            "SELECT cds.cd_id,  cds.cdname,  tracks.nr,  tracks.trackname
     *            FROM cds,  tracks WHERE cds.cd_id = tracks.cd_id
     *            ORDER BY cds.name,  tracks.nr",
     *            array("ID" => "cd_id",  "Name" => "cdname"),
     *            array("Tracks" => array("Nr" => "nr",  "Name" => "trackname")),
     *            array("cd_id")
     *        );
     */    
/*    function map($Query,  $Map,  $Group = array(),  $GroupBy = false)
    {
        if (!is_array($Map) || !count($Map)) 
        {
            SQL::_debug("Get map query failed for '$Query': Invalid Map");
        }
    
        $obj = SQL::getAll($Query,  SQL_RESULTOBJECT);
        if (!$obj)
        {
            return false;
        }

        $arr = $obj->map($Map,  $Group,  $GroupBy);
        $obj->free();
        return $arr;
    }
*/

    /**
     * Teeb INSERT päringu andmebaasi,  kui see tekitab AUTO_INCREMENT väljas
     * uue väärtuse,  siis tagastab selle,  muidu tagastab TRUE,  kui päring
     * on vigane,  tagastab false
     */
    
function insert($Query)
    {
        
$t SQL::microtime();

        if (!@
mysql_query($Query,  SQL::mem('conn')))
        {
            
SQL::_debug("Insert query failed for '$Query': "SQL::_MySQLerror()); 
            return 
false;
        }

        if (@
mysql_affected_rows(SQL::mem('conn')) < 1
        {
            
SQL::_debug("Insert query failed for '$Query': no rows inserted");
            return 
false;
        }
      
        if (
$id mysql_insert_id(SQL::mem('conn')))
        {
            
$time SQL::microtime() - $t;
            
SQL::_debug('insert: ' $Query,  $time );
            return 
$id;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('insert: ' $Query,  $time );

        return 
true;
    }
    
    
/**
     * Teeb mitmekordse INSERT päringu
     * "INSERT INTO ... VALUES (...,  ...),  (...,  ...)"
     * Tagastab õnnestunud INSERT'ide arvu,  või FALSE päringu vea korral
     */    
    
function bulkInsert($Query)
    {
         
$t SQL::microtime();

        if (!@
mysql_query($Query,  SQL::mem('conn')))
        {
            
SQL::_debug("Insert query failed for '$Query': "SQL::_MySQLerror());
            return 
false;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('bulkInsert: ' $Query,  $time );

        return @
mysql_affected_rows(SQL::mem('conn'));
    }

    
/**
     * Teeb UPDATE päringu,  tagastab muudetud ridade arvu
     */    
    
function update($Query)
    {
        
$t SQL::microtime();

        if (!@
mysql_query($Query,  SQL::mem('conn')))
        {
            
SQL::_debug("Update query failed for '$Query': "SQL::_MySQLerror());
            return 
false;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('update: ' $Query,  $time );

        return @
mysql_affected_rows(SQL::mem('conn'));
    }
    
    
/**
     * Teeb DELETE päringu,  tagastab kustutatud ridade arvu
     * Kui WHERE ei ole lisatud tagastab 0
     */    
    
function delete($Query)
    {
        
$t SQL::microtime();

        if (!@
mysql_query($Query,  SQL::mem('conn')))
        {
            
SQL::_debug("Delete query failed for '$Query': "SQL::_MySQLerror());
            return 
false;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('delete: ' $Query,  $time );
        
        return @
mysql_affected_rows(SQL::mem('conn'));
    }

    
/**
     * Teeb REPLACE päringu,  tagastab TRUE õnnestumise korral
     */    
    
function replace($Query)
    {
        
$t SQL::microtime();

        if (!@
mysql_query($Query,  SQL::mem('conn')))
        {
            
SQL::_debug("Replace query failed for '$Query': "SQL::_MySQLerror());
            return 
false;
        }

        
$time SQL::microtime() - $t;
        
SQL::_debug('replace: ' $Query,  $time );

        return 
true;
    }

    
/**
     * Tagastab stringi formateerituna sobivalt päringus kasutamiseks
     */
    
function esc($string)
    {
        if(
get_magic_quotes_gpc() == true
        { 
            
$string stripslashes($string); 
        }

        if(!
function_exists('mysql_real_escape_string'))
        {
            return 
mysql_escape_string($string);
        }

        return 
mysql_real_escape_string($string,  SQL::mem('conn'));
    }
     
    
/**
     * Tegelik serveriga ühendumine
     */
    
function _connect()
    {
        if(!
SQL::mem('conn',  @mysql_connect(SQL::mem('host'),  SQL::mem('user'),  SQL::mem('pass'))))
        {
            
SQL::_debug('connecting to ' SQL::mem('host') .' fails: ' SQL::_MySQLerror());
        }
    }

    
/**
     * Andmebaasi valimine
     */
    
function _selectDB()
    {
        if(!@
mysql_select_db(SQL::mem('db'),  SQL::mem('conn')))
        {
            
SQL::_debug('selecting db ' SQL::mem('db') .' fails: ' SQL::_MySQLerror());
        }
    }

    
/**
     * Salvestab ning tagastab veateated ning päringud
     */
    
function _debug($action NULL,  $time 0)
    {
        static 
$actions;
        if(
$action!==NULL
        {
            
$actions[] = array($action,  $time);
        }
        return 
$actions;
    }

    function 
microtime()
    {
        return 
array_sum(explode(' ',  microtime()));
    }

    
/**
     * Tagastab viimase veateate
     */    
    
function getLastQuery()
    {
        return @
join(' : ',  @array_pop(SQL::_debug()));
    }

    
/**
     * Tagastab veateated loendina või väljastab ekraanile
     */
    
function getQueries($print true)
    {
        
$result '';
        
$errors SQL::_debug();
        if(!empty(
$errors))
        {
            
$result "<ol>\n";
            foreach(
$errors as $err)
            {
                
$result .= "<li>{$err[0]},  {$err[1]}</li>\n";
            }
            
$result .= "</ol>\n";
        }

        if(
$print)
        {
            echo 
$result;
        }
        else
        {
            return 
$result;
        }
    }
    
    
/**
     * Tagastab või väljastab päringutele kulunud aja
     */
    
function getTime($print true)
    {
        
$time 0;
        
$qry SQL::_debug();
        if(!empty(
$qry))
        {
            foreach(
$qry as $q)
            {
                
$time += $q[1];
            }
        }

        if(
$print)
        {
            echo 
$time;
        }
        else
        {
            return 
$time;
        }
    }

    
/**
     * Tagastab MySQL veateate
     */
    
function _MySQLerror()
    {
        return @
mysql_error(SQL::mem('conn'));
    }

    
/**
     * Tagastab $name-le vastava väärtuse või kui antud on
     * teine parameeter siis salvestab selle $name-sse
     */
    
function mem($name)
    {
        static 
$data;
               
        if (
func_num_args() > 1)
        {
            
$value func_get_arg(1);
            
$data[$name] = $value;
        }

        return 
$data[$name];
    }
}

?>


Other Tests And Quiz Scripts:

  • Xlquiz 0.1.1
WebMaster Resources Home

©RingsWorld.com