Esempio n. 1
0
function DB_Select($TablesIDs, $ColumnsIDs = '*', $Query = array())
{
    /****************************************************************************/
    $__args_types = array('string,array', 'string,array', 'array', 'boolean');
    #-----------------------------------------------------------------------------
    $__args__ = Func_Get_Args();
    eval(FUNCTION_INIT);
    /****************************************************************************/
    if (!$TablesIDs) {
        return ERROR | @Trigger_Error('[DB_Select]: имена таблиц не указаны');
    }
    #-----------------------------------------------------------------------------
    $Default = array('GroupBy' => '', 'SortOn' => '', 'IsDesc' => FALSE, 'Limits' => array());
    #-----------------------------------------------------------------------------
    Array_Union($Default, $Query);
    #-----------------------------------------------------------------------------
    $Query = $Default;
    #-----------------------------------------------------------------------------
    if (!Is_Array($TablesIDs)) {
        $TablesIDs = array($TablesIDs);
    }
    #-----------------------------------------------------------------------------
    $Array = array();
    #-----------------------------------------------------------------------------
    foreach ($TablesIDs as $TableID) {
        $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $TableID) ? SPrintF('`%s`', $TableID) : $TableID;
    }
    #-----------------------------------------------------------------------------
    $TablesIDs = $Array;
    #-----------------------------------------------------------------------------
    if (!Is_Array($ColumnsIDs)) {
        $ColumnsIDs = array($ColumnsIDs);
    }
    #-----------------------------------------------------------------------------
    $Array = array();
    #-----------------------------------------------------------------------------
    foreach ($ColumnsIDs as $ColumnID) {
        $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $ColumnID) ? SPrintF('`%s`', $ColumnID) : $ColumnID;
    }
    #-----------------------------------------------------------------------------
    $ColumnsIDs = $Array;
    #-----------------------------------------------------------------------------
    $Sql = SPrintF('SELECT %s FROM %s', Implode(',', $ColumnsIDs), Implode(',', $TablesIDs));
    #-----------------------------------------------------------------------------
    if ($Where = DB_Where($Query)) {
        $Sql = SPrintF('%s WHERE %s', $Sql, $Where);
    }
    #-----------------------------------------------------------------------------
    $GroupBy = $Query['GroupBy'];
    #-----------------------------------------------------------------------------
    if ($GroupBy) {
        #---------------------------------------------------------------------------
        if (!Is_Array($GroupBy)) {
            $GroupBy = array($GroupBy);
        }
        #---------------------------------------------------------------------------
        $Array = array();
        #---------------------------------------------------------------------------
        foreach ($GroupBy as $ColumnID) {
            $Array[] = SPrintF('`%s`', $ColumnID);
        }
        #---------------------------------------------------------------------------
        $GroupBy = $Array;
        #---------------------------------------------------------------------------
        $Sql = SPrintF('%s GROUP BY %s', $Sql, Implode(',', $GroupBy));
    }
    #-----------------------------------------------------------------------------
    $SortOn = $Query['SortOn'];
    #-----------------------------------------------------------------------------
    if ($SortOn) {
        #---------------------------------------------------------------------------
        if (!Is_Array($SortOn)) {
            $SortOn = array($SortOn);
        }
        #---------------------------------------------------------------------------
        $Array = array();
        #---------------------------------------------------------------------------
        foreach ($SortOn as $ColumnID) {
            #-------------------------------------------------------------------------
            $ColumnID = DB_Escape($ColumnID);
            #-------------------------------------------------------------------------
            #$Array[] = StrPos($ColumnID,'.')?$ColumnID:SPrintF('`%s`',$ColumnID);
            # если в названии встречается точка или запятая - не ставим кавычки...
            $Array[] = StrpBrk($ColumnID, '.,') ? $ColumnID : SPrintF('`%s`', $ColumnID);
            #Debug(SPrintF('[system/libs/auto/DB]: SortOn = %s',$ColumnID));
            #$Array[] = $ColumnID;
        }
        #---------------------------------------------------------------------------
        $Sql = SPrintF('%s ORDER BY %s', $Sql, Implode(',', $Array));
    }
    #-----------------------------------------------------------------------------
    if ($Query['IsDesc']) {
        $Sql = SPrintF('%s DESC', $Sql);
    }
    #-----------------------------------------------------------------------------
    $Limits = $Query['Limits'];
    if (Count($Limits) > 1) {
        $Sql = SPrintF('%s LIMIT %s, %s', $Sql, Current($Limits), Next($Limits));
    }
    #-----------------------------------------------------------------------------
    $CacheID = SPrintF('[DB_Select]:%s', Md5($Sql));
    #-----------------------------------------------------------------------------
    if (!($Rows = Cache_Get($CacheID))) {
        #---------------------------------------------------------------------------
        $Result = DB_Query($Sql);
        #---------------------------------------------------------------------------
        switch (ValueOf($Result)) {
            case 'error':
                return ERROR | @Trigger_Error('[DB_Select]: невозможно осуществить запрос');
            case 'resource':
                #-----------------------------------------------------------------------
                $Rows = MySQL::Result($Result);
                #-----------------------------------------------------------------------
                if (Count($Rows) < 1) {
                    return new gException('ROWS_NOT_FOUND', 'Записи не найдены');
                }
                #-----------------------------------------------------------------------
                $NoTypesDB = Link_Get('NoTypesDB', 'boolean');
                #-----------------------------------------------------------------------
                if (!$NoTypesDB) {
                    #---------------------------------------------------------------------
                    for ($i = 0; $i < Count($Rows); $i++) {
                        #-------------------------------------------------------------------
                        $Row =& $Rows[$i];
                        #-------------------------------------------------------------------
                        $Row = DB_Types($Row, 'Explode');
                        if (Is_Error($Row)) {
                            return ERROR | @Trigger_Error('[DB_Select]: не удалось произвести преобразование типов');
                        }
                    }
                }
                #-----------------------------------------------------------------------
                Cache_Add($CacheID, $Rows);
                break;
            default:
                return ERROR | @Trigger_Error(101);
        }
    }
    #-----------------------------------------------------------------------------
    if (In_Array('UNIQ', $Query, TRUE)) {
        #---------------------------------------------------------------------------
        if (Count($Rows) > 1) {
            return ERROR | @Trigger_Error('[DB_Select]: запись не является уникальной');
        }
        #---------------------------------------------------------------------------
        $Rows = Current($Rows);
    }
    #-----------------------------------------------------------------------------
    return $Rows;
}
Esempio n. 2
0
/******************************************************************************/
$__args_list = array('LinkID');
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
eval(COMP_INIT);
/******************************************************************************/
/******************************************************************************/
$Links =& Links();
# Коллекция ссылок
$Template =& $Links[$LinkID];
/******************************************************************************/
/******************************************************************************/
$CacheID = 'TableSuper[Indexes]';
#-------------------------------------------------------------------------------
if (!($NoBody = Cache_Get($CacheID))) {
    #-----------------------------------------------------------------------------
    $Count = $Template['Source']['Count'];
    #-----------------------------------------------------------------------------
    if ($Count < 1) {
        return FALSE;
    }
    #-----------------------------------------------------------------------------
    $Div = new Tag('DIV', array('class' => 'TableSuperNavigation'));
    #-----------------------------------------------------------------------------
    $Options = array();
    #-----------------------------------------------------------------------------
    for ($i = 5; $i < 100; $i *= 2) {
        $Options[$i] = $i;
    }
    #-----------------------------------------------------------------------------