2016-06-08 3 views
0

이 질문에 대해 용서해주십시오. 저는 PHP를 매우 처음 사용하고 제 질문에 대한 답을 찾을 수 없습니다.계속 sql 연결을 닫지 않고 데이터를 입력하십시오.

자바 스크립트와 AJAX를 사용하여 설정 한 내부 시간대에서 사용자의 데이터를 지속적으로 업데이트해야합니다.

php를 설정하면 어쨌든 서버에 연결되면 연결을 열어두고 닫을 때까지 새 데이터를 계속 받아 들일 수 있습니까?

+0

[Server-Sent Events] (http://www.html5rocks.com/en/tutorials/eventsource/basics/). –

답변

1

당신은 MySQL의에 persistent connection을 설정할 수 있습니다 :

<?php 
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true 
)); 
?> 

그러나, 웹 응용 프로그램의 지속적인 연결이 심각한 문제가 발생할 수 있습니다. 영구 데이터베이스 연결에 대한 자세한 내용은 What are the disadvantages of using persistent connection in PDO 항목을 참조하십시오.

MySQL에서는 데이터베이스 연결을 만들고 닫는 것과 관련된 상당한 오버 헤드가 없으므로 PHP 스크립트를 호출 할 때마다 새 연결을 설정하면됩니다.

0

왜 연결을 유지하고 싶습니까?

두 번째로 데이터를 보내면 해당 페이지의 새 인스턴스가 서버의 PHP에서 실행되고 요청을 진행하십시오. 한 번 열린 데이터베이스 연결은 트랜잭션이 수행되는 즉시 닫아야하며 다른 쿼리가 실행될 수 있도록 리소스를 비우지 않습니다.

응용 프로그램을 사용하는 사용자가 2 명인 경우 첫 번째 서버가 일부 데이터 전송을 시작한 후 더 많은 정보를 보내기 전에 서버가 데이터베이스와의 연결을 유지했다면 사용자 2는 처리 할 수 ​​없습니다 데이터베이스가 현재 사용자 1의 요청에 의해 점유되어 있으므로 요청입니다.

각 데이터 집합에 대해 개별적으로 연결을 열고 닫는 것이 좋습니다.

+0

나는 이것을 몰랐다. 고마워. –

0

정말 필요한 것은 싱글 톤 DB 연결 모델이라고 생각합니다. 재사용을 위해 정적 인스턴스를 얻을 수 있습니다.

class DB { 

    private $_connection; 
    private static $_instance; //The single instance 
    private $_host = MY_HOSTNAME; 
    private $_username = MY_USERNAME; 
    private $password = MY_PASSWORD; 
    private $_database = MY_DBNAME; 

    public static function getInstance() { 
     if(!self::$_instance) { // If no instance then make one 
      self::$_instance = new self(); 
     } 
     return self::$_instance; 
    } 

    // Constructor 
    private function __construct() { 
     $this->_connection = new mysqli($this->_host, $this->_username, 
      $this->_password, $this->_database); 

     if(mysqli_connect_error()) { 
      trigger_error("Failed to conencto to MySQL: " . mysql_connect_error(), 
       E_USER_ERROR); 
     } 
    } 

    private function __clone() { } 

    // Get mysqli connection 
    public function getConnection() { 
     return $this->_connection; 
    } 

    // Force mysqli connection to close 
    public function closeConnection() { 
     return mysqli_close($this->_connection); 
    } 
} 
+0

이것은 여전히 ​​각 요청에 대해 새 연결을 열 것입니다. – tlenss

+0

예.하지만 동일한 스크립트에서 DB 인스턴스 재사용에 유용 할 수 있습니다. –

관련 문제