2012-09-12 3 views
1

예를 들어,이 경우 'views'카운트가 세션 동안 분명하게 증가하지만 mysqli 객체는 유지되지 않으며 세션 동안 (페이지가 새로 고쳐 지거나 다른 경우) 재사용 할 수 없습니다. _SESSION 글로벌은 단순한 유형 만 보유 할 수 있습니까? 다른 무엇이 이것을 제한 할 수 있습니까? 편집 : 여기 내 희망은 성능을 향상시키는 것입니다. 그래서 이것을 달성 할 또 다른 방법이 있다면, 나는 기쁜 마음으로 알게 될 것입니다.PHP에서 세션간에 mysql 객체를 저장할 수 있습니까?

<?php 
session_start(); 

if(isset($_SESSION['db'])) 
{ 
    $mysqli = $_SESSION['db']; 
    $_SESSION['views']=$_SESSION['views']+1; 
} 
else 
{ 
    $mysqli = new mysqli(...); 
    $_SESSION['db'] = $mysqli; 
    $_SESSION['views']=1; 
} 

echo "Views=". $_SESSION['views'];  

?> 
+1

'$ _SESSION'은 단순한 타입과 직렬화 된 데이터만을 가지고 있습니다. 객체를 보유 할 수는 있지만 객체의 상태 나 값을 보유 할 수는 없습니다. 페이지가 새로 고침되면'$ _SESSION' 값도 새로 고쳐지며 이는 객체의 새로운 인스턴스를 의미합니다. –

+2

왜 필요한가요? 이 시도의 진정한 문제는 무엇입니까? – zerkms

+0

@zerkms - 내 희망은 연결을 다시 생성하지 않음으로써 성능을 향상시키는 것이 었습니다. 그렇게 할 수있는 방법이 있으면 알려 주시기 바랍니다. – glutz

답변

3

아니요, 아무도 PHP 리소스를 직렬화 할 수 없습니다. 따라서 매번 mysqli 개체를 인스턴스화해야합니다.

편집 : 내 희망은 여기 성능 향상을 위해 작성되었습니다.

첫 번째 측정 - 두 번째 최적화는 숫자 1 성능 최적화 규칙입니다. 세계 어느 누구도 프로파일 링 (측정)없이 성능 문제가 무엇인지 말할 수 없습니다.

응용 프로그램이 너무 느리게 작동합니까? 글쎄, 속도를 늦추고 그 특정 장소를 최적화하는 요인을 측정하십시오. 그리고 mysql과의 연결이 아니라는 것을 확신 할 수 있습니다.

+0

글쎄, 그냥 생각 해봤는데. 그러나 나는 그것을 프로파일 할 것이다. 메신저 DB 연결이 병목 현상이 아니라는 것을 듣고 꽤 놀랐습니다. 감사. – glutz

+0

@glutz : 일반적으로 병목 현상은 db 쿼리이지만, 내가 말했듯이 최적화를 시작하기 전에 측정해야합니다. – zerkms

0

직접 할 수 없습니다. 하지만 마법 방법을 사용할 수 있습니다 : __sleep() and __wakeup().

class Connection { 
    protected $link; 
    private $server, $username, $password, $db; 

    public function __construct($server, $username, $password, $db) { 
     $this->server = $server; 
     $this->username = $username; 
     $this->password = $password; 
     $this->db = $db; 
     $this->connect(); 
    } 

    private function connect() { 
     $this->link = mysql_connect($this->server, $this->username, $this->password); 
     mysql_select_db($this->db, $this->link); 
    } 

    public function __sleep() { 
     return array('server', 'username', 'password', 'db'); 
    } 

    public function __wakeup() { 
     $this->connect(); 
    } 
} 

세션과 함께 할 필요는 없습니다.

+0

그것은 무의미합니다. – zerkms

관련 문제