Changeset 4570

Show
Ignore:
Timestamp:
10/15/07 21:01:31 (13 months ago)
Author:
inureyes
Message:

#711

  • 쿼리 관련 명령을 단순하게 추상화.
  • 결과값의 수를 얻는 경우는 DBQuery::queryCount로 간략화함.
  • mysql.php에 속하는 함수를 일반화하고 해당 함수 삭제
  • 데이터베이스 참조시 사용하는 쿼리 변경
  • 세션 쿼리에서 mysql dependency를 줄임.
Location:
trunk
Files:
1 removed
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/components/Needlworks.DBMS.MySQL.php

    r4569 r4570  
    4747        $count = 0; 
    4848        if ($result = DBQuery::query($query)) { 
    49             $count = mysql_num_rows($result); 
    50             mysql_free_result($result); 
     49            if( stristr($query, 'select ')) { 
     50                $count = mysql_num_rows($result); 
     51                mysql_free_result($result); 
     52            } else if (stristr($query, 'insert ') || 
     53            stristr($query, 'update ') || 
     54            stristr($query, 'delete ') || 
     55            stristr($query, 'replace ') ) { 
     56                $count = mysql_affected_rows(); 
     57            } 
    5158        } 
    5259        return $count; 
    5360    } 
    54      
     61 
    5562    /*@static@*/ 
    5663    function queryCell($query, $field = 0, $useCache=true) { 
  • trunk/lib/database.php

    r4563 r4570  
    99    return DBQuery::escapeString($string, $link); 
    1010} 
     11 
     12function escapeSearchString($str) { 
     13    return is_string($str) ? str_replace('_', '\_', str_replace('%', '\%', tc_escape_string($str))) : $str; 
     14} 
     15 
     16function doesExistTable($tablename) 
     17{ 
     18    global $database; 
     19    static $tables = array();    
     20    if( empty($tables) ) { 
     21        $escapename = escapeSearchString($database['prefix']); 
     22        $tables = DBQuery::queryColumn( "SHOW TABLES LIKE '{$escapename}%'" ); 
     23    } 
     24    if( in_array( $tablename, $tables ) ) { 
     25        return true; 
     26    } 
     27    return false; 
     28} 
    1129?> 
  • trunk/lib/includeForBlog.php

    r3945 r4570  
    1010require 'function/html.php'; 
    1111require 'function/xml.php'; 
    12 require 'function/mysql.php'; 
    1312require 'function/misc.php'; 
    1413require 'function/image.php'; 
  • trunk/lib/includeForBlogOwner.php

    r3945 r4570  
    1010require 'function/html.php'; 
    1111require 'function/xml.php'; 
    12 require 'function/mysql.php'; 
    1312require 'function/misc.php'; 
    1413require 'function/image.php'; 
  • trunk/lib/includeForReader.php

    r3477 r4570  
    1010require 'function/html.php'; 
    1111require 'function/xml.php'; 
    12 require 'function/mysql.php'; 
    1312require 'function/misc.php'; 
    1413require 'function/image.php'; 
  • trunk/lib/session.php

    r4563 r4570  
    1919function readSession($id) { 
    2020    global $database, $service; 
    21     if ($result = sessionQuery("SELECT data FROM {$database['prefix']}Sessions WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}' AND updated >= (UNIX_TIMESTAMP() - {$service['timeout']})")) { 
    22         if ($session = mysql_fetch_array($result)) 
    23             return $session['data']; 
     21    if ($result = sessionQuery("SELECT data FROM {$database['prefix']}Sessions  
     22        WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}' AND updated >= (UNIX_TIMESTAMP() - {$service['timeout']})")) { 
     23        return $result; 
    2424    } 
    2525    return ''; 
     
    3838    $referer = isset($_SERVER['HTTP_REFERER']) ? tc_escape_string($_SERVER['HTTP_REFERER']) : ''; 
    3939    $timer = getMicrotimeAsFloat() - $sessionMicrotime; 
    40     $result = DBQuery::query("UPDATE {$database['prefix']}Sessions SET userid = $userid, data = '$data', server = '$server', request = '$request', referer = '$referer', timer = $timer, updated = UNIX_TIMESTAMP() WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); 
    41     if ($result && (mysql_affected_rows() == 1)) 
     40    $result = DBQuery::queryCount("UPDATE {$database['prefix']}Sessions  
     41            SET userid = $userid, data = '$data', server = '$server', request = '$request', referer = '$referer', timer = $timer, updated = UNIX_TIMESTAMP()  
     42            WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); 
     43    if ($result && $result == 1) 
    4244        return true; 
    4345    return false; 
     
    4648function destroySession($id, $setCookie = false) { 
    4749    global $database; 
    48     @DBQuery::query("DELETE FROM {$database['prefix']}Sessions WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); 
     50    @DBQuery::query("DELETE FROM {$database['prefix']}Sessions  
     51        WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); 
    4952    gcSession(); 
    5053} 
     
    5255function gcSession($maxLifeTime = false) { 
    5356    global $database, $service; 
    54     @DBQuery::query("DELETE FROM {$database['prefix']}Sessions WHERE updated < (UNIX_TIMESTAMP() - {$service['timeout']})"); 
    55     $result = @sessionQuery("SELECT DISTINCT v.id, v.address FROM {$database['prefix']}SessionVisits v LEFT JOIN {$database['prefix']}Sessions s ON v.id = s.id AND v.address = s.address WHERE s.id IS NULL AND s.address IS NULL"); 
     57    @DBQuery::query("DELETE FROM {$database['prefix']}Sessions  
     58        WHERE updated < (UNIX_TIMESTAMP() - {$service['timeout']})"); 
     59    $result = @sessionQueryAll("SELECT DISTINCT v.id, v.address  
     60        FROM {$database['prefix']}SessionVisits v  
     61        LEFT JOIN {$database['prefix']}Sessions s ON v.id = s.id AND v.address = s.address  
     62        WHERE s.id IS NULL AND s.address IS NULL"); 
    5663    if ($result) { 
    5764        $gc = array(); 
    58         while ($g = mysql_fetch_row($result)) 
     65        foreach ($result as $g) 
    5966            array_push($gc, $g); 
    6067        foreach ($gc as $g) 
     
    6774    global $database; 
    6875    $result = sessionQuery("SELECT id FROM {$database['prefix']}Sessions WHERE address = '{$_SERVER['REMOTE_ADDR']}' AND userid IS NULL AND preexistence IS NULL"); 
    69     if ($result && (list($id) = mysql_fetch_array($result))) 
    70         return $id; 
     76    if ($result) 
     77        return $result; 
    7178    return false; 
    7279} 
     
    7885            return $id; 
    7986        $id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)); 
    80         DBQuery::query("INSERT INTO {$database['prefix']}Sessions(id, address, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
    81         if (mysql_affected_rows() > 0) 
     87        $result = DBQuery::queryCount("INSERT INTO {$database['prefix']}Sessions(id, address, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
     88        if ($result > 0) 
    8289            return $id; 
    8390    } 
     
    104111    for ($i = 0; ($i < 100) && !setSessionAnonymous(); $i++) { 
    105112        $id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)); 
    106         $result = DBQuery::query("INSERT INTO {$database['prefix']}Sessions(id, address, created, updated) SELECT DISTINCT '$id', '{$_SERVER['REMOTE_ADDR']}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
    107         if (($result !== false) && (mysql_affected_rows() > 0)) { 
     113        $result = DBQuery::queryCount("INSERT INTO {$database['prefix']}Sessions(id, address, created, updated) SELECT DISTINCT '$id', '{$_SERVER['REMOTE_ADDR']}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
     114        if ($result && $result > 0) { 
    108115            session_id($id); 
    109116            return true; 
     
    115122function isSessionAuthorized($id) { 
    116123    global $database; 
    117     $result = DBQuery::query("select id from {$database['prefix']}Sessions where id = '$id' and address = '{$_SERVER['REMOTE_ADDR']}' and (userid is not null or preexistence is not null)"); 
    118     if ($result && (mysql_num_rows($result) == 1)) 
     124    $result = DBQuery::queryCell("SELECT id  
     125        FROM {$database['prefix']}Sessions  
     126        WHERE id = '$id'  
     127            AND address = '{$_SERVER['REMOTE_ADDR']}'  
     128            AND (userid IS NOT NULL OR preexistence IS NOT NULL)"); 
     129    if ($result) 
    119130        return true; 
    120131    return false; 
     
    141152    for ($i = 0; $i < 100; $i++) { 
    142153        $id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)); 
    143         $result = DBQuery::query("INSERT INTO {$database['prefix']}Sessions(id, address, userid, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', $userid, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
    144         if ($result && (mysql_affected_rows() == 1)) { 
     154        $result = DBQuery::queryCount("INSERT INTO {$database['prefix']}Sessions 
     155            (id, address, userid, created, updated)  
     156            VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', $userid, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); 
     157        if ($result && $result == 1) { 
    145158            @session_id($id); 
    146159            setcookie('TSSESSION', $id, 0, $session_cookie_path, $service['domain']); 
     
    153166function sessionQuery($sql) { 
    154167    global $database, $sessionDBRepair; 
    155     $result = DBQuery::query($sql); 
     168    $result = DBQuery::queryCell($sql); 
    156169    if($result === false) { 
    157170        if (!isset($sessionDBRepair)) {      
    158171            DBQuery::query("REPAIR TABLE {$database['prefix']}Sessions"); 
    159             $result = DBQuery::query($sql); 
     172            $result = DBQuery::queryCell($sql); 
     173            $sessionDBRepair = true; 
     174        } 
     175    } 
     176    return $result; 
     177} 
     178 
     179function sessionQueryAll($sql) { 
     180    global $database, $sessionDBRepair; 
     181    $result = DBQuery::queryAll($sql); 
     182    if($result === false) { 
     183        if (!isset($sessionDBRepair)) {      
     184            DBQuery::query("REPAIR TABLE {$database['prefix']}Sessions"); 
     185            $result = DBQuery::queryAll($sql); 
    160186            $sessionDBRepair = true; 
    161187        }