Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/ips_kernel/classDbMysqliClient.php
Строк: 409
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * MySQL Database Driver :: MySQLi client
 * Last Updated: $Date: 2012-05-25 13:17:47 -0400 (Fri, 25 May 2012) $
 * </pre>
 *
 * @author         $Author: ips_terabyte $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage    Kernel
 * @link        http://www.invisionpower.com
 * @since        Monday 28th February 2005 16:46
 * @version        $Revision: 10798 $
 */

class db_driver_mysql extends db_main_mysql implements interfaceDb
{
    
/**
     * Connection failed flag
     *
     * @var         boolean
     */
    
protected $connect_failed        false;

    
/**
     * constructor
     *
     * @return    @e void
     */
    
public function __construct()
    {
        if( !
defined('MYSQLI_USED') )
        {
            
define'MYSQLI_USED');
        }

        
//--------------------------------------
        // Set up any required connect vars here
        //--------------------------------------

         
$this->connect_vars['mysql_tbl_type'] = "";
    }

    
/**
     * Connect to database server
     *
     * @return    @e boolean
     */
    
public function connect()
    {
        
//-----------------------------------------
         // Done SQL prefix yet?
         //-----------------------------------------

         
$this->_setPrefix();

        
//-----------------------------------------
        // Load query file
        //-----------------------------------------

        
$this->_loadCacheFile();

         
//-----------------------------------------
         // Connect
         //-----------------------------------------

        /* Did we add a port inline? */
        
if ( ! $this->obj['sql_port'] AND strstr$this->obj['sql_host'], ':' ) )
        {
            list( 
$host$port ) = explode':'$this->obj['sql_host'] );

            
$this->obj['sql_host'] = $host;
            
$this->obj['sql_port'] = intval$port );
        }
        
        
/* Persistent connection */
        
if( $this->obj['persistent'] )
        {
            
$this->obj['sql_host'] = 'p:' $this->obj['sql_host'];
        }
        
        
/* Use socket if specified */
        
if( $this->obj['sql_socket'] )
        {
            if( 
$this->obj['sql_port'] )
            {
                
$this->connection_id = @mysqli_connect$this->obj['sql_host'],
                                                          
$this->obj['sql_user'],
                                                          
$this->obj['sql_pass'],
                                                          
$this->obj['sql_database'],
                                                          
$this->obj['sql_port'],
                                                          
$this->obj['sql_socket']
                                                        );
            }
            else
            {
                
$this->connection_id = @mysqli_connect$this->obj['sql_host'],
                                                          
$this->obj['sql_user'],
                                                          
$this->obj['sql_pass'],
                                                          
$this->obj['sql_database'],
                                                          
null,
                                                          
$this->obj['sql_socket']
                                                        );
            }
        }
        else
        {
            if( 
$this->obj['sql_port'] )
            {
                
$this->connection_id = @mysqli_connect$this->obj['sql_host'],
                                                          
$this->obj['sql_user'],
                                                          
$this->obj['sql_pass'],
                                                          
$this->obj['sql_database'],
                                                          
$this->obj['sql_port']
                                                        );
            }
            else
            {
                
$this->connection_id = @mysqli_connect$this->obj['sql_host'],
                                                          
$this->obj['sql_user'],
                                                          
$this->obj['sql_pass'],
                                                          
$this->obj['sql_database']
                                                        );
            }

        }

        if ( ! 
$this->connection_id )
        {
            
$this->usingClass     'db_driver_mysql';
            
$this->connect_failed true;
            
$this->throwFatalError();
            return 
FALSE;
        }

        
mysqli_autocommit$this->connection_idTRUE );

         
//-----------------------------------------
         // Remove sensitive data
         //-----------------------------------------

        
unset( $this->obj['sql_host'] );
        unset( 
$this->obj['sql_user'] );
        unset( 
$this->obj['sql_pass'] );

         
//-----------------------------------------
         // If there's a charset set, run it
         //-----------------------------------------

         
if( $this->obj['sql_charset'] )
         {
             
$this->query"SET NAMES '{$this->obj['sql_charset']}'" );
//set encoding (ibr 2011)
            
$this->query"SET CHARACTER SET '{$this->obj['sql_charset']}'");
            
$this->query"SET character_set_connection = " .$this->obj['sql_charset']);
            
            
$res mysqli_query($this->connection_id"SHOW CHARSET LIKE '" $this->obj['sql_charset']  .  "'" );
            
            
$charset mysqli_fetch_row($res);
            
            
$this->query"SET collation_connection = " $charset[2] );
         }

        
parent::connect();

        return 
TRUE;
    }

    
/**
     * Close database connection
     *
     * @return    @e boolean
     */
    
public function disconnect()
    {
        if ( 
$this->connection_id )
        {
            return @
mysqli_close$this->connection_id );
        }
    }

    
/**
     * Execute a direct database query
     *
     * @param    string        Database query
     * @param    boolean        [Optional] Do not convert table prefix
     * @return    @e resource
     */
    
public function query$the_query$bypass=false )
    {
        
//-----------------------------------------
        // Debug?
        //-----------------------------------------

        
if ( $this->obj['debug'] OR ( $this->obj['use_debug_log'] AND $this->obj['debug_log'] ) OR ( $this->obj['use_bad_log'] AND $this->obj['bad_log'] ) )
        {
            
IPSDebug::startTimer();
            
$_MEMORY IPSDebug::getMemoryDebugFlag();
        }

        
//-----------------------------------------
        // Stop sub selects? (UNION)
        //-----------------------------------------

        
if ( ! IPS_DB_ALLOW_SUB_SELECTS )
        {
            
# On the spot allowance?
            
if ( ! $this->allow_sub_select )
            {
                
$_tmp strtolower$this->_removeAllQuotes($the_query) );

                if ( 
preg_match"#(?:/*|*/)#i"$_tmp ) )
                {
                    
$this->throwFatalError"Не разрешается использовать комментарии в SQL запросе.nДобавьте ipsRegistry::DB()->allow_sub_select=1; перед запросом, чтобы разрешить ихn{$the_query});
                    return 
false;
                }

                if ( 
preg_match"#[^_a-zA-Z]union[^_a-zA-Z]#s"$_tmp ) )
                {
                    
$this->throwFatalError"Использование UNION в запросах запрещено.nДобавьте ipsRegistry::DB()->allow_sub_select=1; перед запросом, чтобы разрешить использованиеn{$the_query});
                    return 
false;
                }
                else if ( 
preg_match_all"#[^_a-zA-Z](select)[^_a-zA-Z]#s"$_tmp$matches ) )
                {
                    if ( 
count$matches ) > )
                    {
                        
$this->throwFatalError"Вложенные SELECT в запросах запрещены.nДобавьте ipsRegistry::DB()->allow_sub_select=1; перед запросом, чтобы разрешить ихn{$the_query});
                        return 
false;
                    }
                }
            }
        }

        
//-----------------------------------------
        // Run the query
        //-----------------------------------------
        
$this->_tmpQ    substr$the_query0100 ) . '...';
        
$this->query_id mysqli_query($this->connection_id$the_query );

          
//-----------------------------------------
          // Reset array...
          //-----------------------------------------

          
$this->resetDataTypes();
          
$this->allow_sub_select false;

        if (! 
$this->query_id )
        {
            
$this->throwFatalError("mySQL query error: $the_query");
        }

        
//-----------------------------------------
        // Logging?
        //-----------------------------------------

        
if ( ( $this->obj['use_debug_log'] AND $this->obj['debug_log'] ) OR ( $this->obj['use_bad_log'] AND $this->obj['bad_log'] ) OR ( $this->obj['use_slow_log'] AND $this->obj['slow_log'] ) )
        {
            
$endtime  IPSDebug::endTimer();
            
$_data    '';

            if ( 
preg_match"/^(?:()?select/i"$the_query ) )
            {
                
$eid  mysqli_query($this->connection_id"EXPLAIN {$the_query}");
                
$_bad false;

                while( 
$array mysqli_fetch_array($eid) )
                {
                    
$array['extra'] = isset( $array['extra'] ) ? $array['extra'] : '';

                    
$_data .= "n+------------------------------------------------------------------------------+";
                    
$_data .= "n|Table: "$array['table'];
                    
$_data .= "n|Type: "$array['type'];
                    
$_data .= "n|Possible Keys: "$array['possible_keys'];
                    
$_data .= "n|Key: "$array['key'];
                    
$_data .= "n|Key Len: "$array['key_len'];
                    
$_data .= "n|Ref: "$array['ref'];
                    
$_data .= "n|Rows: "$array['rows'];
                    
$_data .= "n|Extra: "$array['Extra'];
                    
//$_data .= "n+------------------------------------------------------------------------------+";

                    
if ( ( $this->obj['use_bad_log'] AND $this->obj['bad_log'] ) AND ( stristr$array['Extra'], 'filesort' ) OR stristr$array['Extra'], 'temporary' ) ) )
                    {
                        
$this->writeDebugLog$the_query$_data$endtime$this->obj['bad_log'], TRUE );
                    }

                    if ( ( 
$this->obj['use_slow_log'] AND $this->obj['slow_log'] ) AND $endtime >= $this->obj['use_slow_log'] )
                    {
                        
$this->writeDebugLog$the_query$_data$endtime$this->obj['slow_log'], TRUE );
                    }
                }

                if ( 
$this->obj['use_debug_log'] AND $this->obj['debug_log'] )
                {
                    
$this->writeDebugLog$the_query$_data$endtime );
                }
            }
            else
            {
                if ( 
$this->obj['use_debug_log'] AND $this->obj['debug_log'] )
                {
                    
$this->writeDebugLog$the_query$_data$endtime );
                }
            }
        }

        
//-----------------------------------------
        // Debugging?
        //-----------------------------------------

        
if ($this->obj['debug'])
        {
            
$endtime    IPSDebug::endTimer();
            
$memoryUsed IPSDebug::setMemoryDebugFlag''$_MEMORY );
            
$memory     '';
            
$shutdown   $this->is_shutdown 'SHUTDOWN QUERY: ' '';

            if ( 
preg_match"/^(?:()?select/i"$the_query ) )
            {
                
$eid mysqli_query$this->connection_id"EXPLAIN {$the_query});

                
$this->debug_html .= "<table width='95%' border='1' cellpadding='6' cellspacing='0' bgcolor='#FFE8F3' align='center'>
                                           <tr>
                                                <td colspan='8' style='font-size:14px' bgcolor='#FFC5Cb'><b>
{$shutdown}Select Query</b></td>
                                           </tr>
                                           <tr>
                                            <td colspan='8' style='font-family:courier, monaco, arial;font-size:14px;color:black'>
$the_query</td>
                                           </tr>
                                           <tr bgcolor='#FFC5Cb'>
                                             <td><b>table</b></td><td><b>type</b></td><td><b>possible_keys</b></td>
                                             <td><b>key</b></td><td><b>key_len</b></td><td><b>ref</b></td>
                                             <td><b>rows</b></td><td><b>Extra</b></td>
                                           </tr>n"
;
                while( 
$array mysqli_fetch_array($eid) )
                {
                    
$type_col '#FFFFFF';

                    if (
$array['type'] == 'ref' or $array['type'] == 'eq_ref' or $array['type'] == 'const')
                    {
                        
$type_col '#D8FFD4';
                    }
                    else if (
$array['type'] == 'ALL')
                    {
                        
$type_col '#FFEEBA';
                    }

                    
$this->debug_html .= "<tr bgcolor='#FFFFFF'>
                                             <td>
$array[table]&nbsp;</td>
                                             <td bgcolor='
$type_col'>$array[type]&nbsp;</td>
                                             <td>
$array[possible_keys]&nbsp;</td>
                                             <td>
$array[key]&nbsp;</td>
                                             <td>
$array[key_len]&nbsp;</td>
                                             <td>
$array[ref]&nbsp;</td>
                                             <td>
$array[rows]&nbsp;</td>
                                             <td>
$array[Extra]&nbsp;</td>
                                           </tr>n"
;
                }

                
$this->sql_time += $endtime;

                if (
$endtime 0.1)
                {
                    
$endtime "<span style='color:red'><b>$endtime</b></span>";
                }

                if ( 
$memoryUsed )
                {
                    
$memory '<br />Memory Used: ' IPSLib::sizeFormat$memoryUsedTRUE );
                }

                
$this->debug_html .= "<tr>
                                          <td colspan='8' bgcolor='#FFD6DC' style='font-size:14px'><b>MySQL time</b>: 
$endtime{$memory}</b></td>
                                          </tr>
                                          </table>n<br />n"
;
            }
            else
            {
              
$this->debug_html .= "<table width='95%' border='1' cellpadding='6' cellspacing='0' bgcolor='#FEFEFE'  align='center'>
                                         <tr>
                                          <td style='font-size:14px' bgcolor='#EFEFEF'><b>
{$shutdown}Non Select Query</b></td>
                                         </tr>
                                         <tr>
                                          <td style='font-family:courier, monaco, arial;font-size:14px'>
$the_query</td>
                                         </tr>
                                         <tr>
                                          <td style='font-size:14px' bgcolor='#EFEFEF'><b>MySQL time</b>: 
$endtime</span></td>
                                         </tr>
                                        </table><br />nn"
;
            }
        }

        
$this->query_count++;

        
$this->obj['cached_queries'][] = $the_query;

        return 
$this->query_id;
    }

    
/**
     * Retrieve number of rows affected by last query
     *
     * @return    @e integer
     */
    
public function getAffectedRows()
    {
        return 
mysqli_affected_rows$this->connection_id );
    }

    
/**
     * Retrieve number of rows in result set
     *
     * @param    resource    [Optional] Query id
     * @return    @e integer
     */
    
public function getTotalRows$query_id=null )
    {
        if ( ! 
$query_id )
           {
            
$query_id $this->query_id;
        }

        return 
mysqli_num_rows$query_id );
    }

    
/**
     * Retrieve latest autoincrement insert id
     *
     * @return    @e integer
     */
    
public function getInsertId()
    {
        return 
mysqli_insert_id($this->connection_id);
    }

    
/**
     * Retrieve the current thread id
     *
     * @return    @e integer
     */
    
public function getThreadId()
    {
        return 
mysqli_thread_id($this->connection_id);
    }

    
/**
     * Free result set from memory
     *
     * @param    resource    [Optional] Query id
     * @return    @e void
     */
    
public function freeResult$query_id=null )
    {
           if ( ! 
$query_id )
           {
            
$query_id $this->query_id;
        }

        @
mysqli_free_result$query_id );
    }

    
/**
     * Retrieve row from database
     *
     * @param    resource    [Optional] Query result id
     * @return    @e mixed
     */
    
public function fetch$query_id=null )
    {
        
//$_MEMORY = IPSDebug::getMemoryDebugFlag();

        
if ( ! $query_id )
        {
            
$query_id $this->query_id;
        }

        
$this->record_row mysqli_fetch_assoc$query_id );

/*if ( is_array( $this->record_row ) )
{
$tmp = $this->record_row;
$boo = array_shift( $tmp );
}

$poo = IPSDebug::setMemoryDebugFlag( 'Fetch Row: ' . $boo . ' ' . $this->_tmpQ, $_MEMORY );
$this->_tmpT += $poo;*/
        
return $this->record_row;
    }

    
/**
     * Return the number calculated rows (as if there was no limit clause)
     *
     * @param    string         [ alias name for the count(*) ]
     * @return    @e integer
     */
    
public function fetchCalculatedRows$alias='count' )
    {
        
$calcRowsHandle mysqli_query$this->connection_id"SELECT FOUND_ROWS() as " $alias );
        
        
$this->obj['cached_queries'][] = "SELECT FOUND_ROWS() as " $alias;
        
        
$val mysqli_fetch_assoc$calcRowsHandle );

        return 
intval$val$alias ] );
    }

    
/**
     * Get array of fields in result set
     *
     * @param    resource    [Optional] Query id
     * @return    @e array
     */
    
public function getResultFields$query_id=null )
    {
        
$fields = array();

           if ( !
$query_id )
           {
            
$query_id $this->query_id;
        }

        while( 
$field mysqli_fetch_field($query_id) )
        {
            
$fields[] = $field;
        }

        return 
$fields;
    }

    
/**
     * Get array of table names in database
     *
     * @return    @e array
     */
    
public function getTableNames()
    {
        if ( 
is_array$this->cached_tables ) AND count$this->cached_tables ) )
        {
            return 
$this->cached_tables;
        }

        
$current            $this->return_die;
        
$this->return_die     true;

        
$qid $this->query"SHOW TABLES FROM `{$this->obj['sql_database']}`" );

        
$this->return_die     $current;

        if( 
$qid AND $this->getTotalRows($qid) )
        {
            while( 
$result mysqli_fetch_array($qid) )
            {
                
$this->cached_tables[] = $result[0];
            }
        }

        
mysqli_free_result($qid);

        return 
$this->cached_tables;
       }

    
/**
     * Retrieve SQL server version
     *
     * @return    @e string
     */
    
public function getSqlVersion()
    {
        if ( ! 
$this->sql_version and ! $this->true_version )
        {
            
$version mysqli_get_server_info($this->connection_id);

            
$this->true_version $version;
            
$tmp                explode'.'preg_replace"#[^d.]#""\1"$version ) );

            
$this->sql_version sprintf('%d%02d%02d'$tmp[0], $tmp[1], $tmp[2] );
           }

           return 
$this->sql_version;
    }

    
/**
     * Escape strings for DB insertion
     *
     * @param    string        Text to escape
     * @return    @e string
     */
    
public function addSlashes$t )
    {
        return @
mysqli_real_escape_string$this->connection_id$t );
    }

    
/**
     * Get SQL error number
     *
     * @return    @e mixed
     */
    
protected function _getErrorNumber()
    {
        if( 
$this->connect_failed )
        {
            return 
mysqli_connect_errno();
        }
        else
        {
            return 
mysqli_errno$this->connection_id );
        }
    }

    
/**
     * Get SQL error message
     *
     * @return    @e string
     */
    
protected function _getErrorString()
    { 
        if( 
$this->connect_failed )
        {
            return 
mysqli_connect_error( );
        }
        else
        {
            return 
mysqli_error$this->connection_id );
        }
    }
    
    
/**
     * Test to see whether a table exists
     *
     * @param    string        Table name
     * @return    @e boolean
     */
    
public function checkForTable$table )
    {
        
//$table_names = $this->getTableNames();

        //$return = false;

        //if ( in_array( strtolower( trim( $this->obj['sql_tbl_prefix'] . $table ) ), array_map( 'strtolower', $table_names ) ) )
        //{
        //    $return = true;
        //}

        //unset($table_names);
        
        
$table trim$this->obj['sql_tbl_prefix'] . $table );
        
        
$qid $this->query"SHOW TABLES FROM `{$this->obj['sql_database']}` LIKE '{$table}'" );

        if( ! 
$qid OR ! $this->getTotalRows($qid) )
        {
            return 
false;
        }
        else
        {
            while( 
$result mysqli_fetch_array($qid) )
            {
                if( 
$result[0] == $table )
                {
                    
mysqli_free_result($qid);

                    return 
true;
                }
            }
        }

        return 
false;
    }
// end class
Онлайн: 1
Реклама