【问题标题】:Continously enter data without closing sql connection连续输入数据不关闭sql连接
【发布时间】:2016-10-08 16:54:49
【问题描述】:

请原谅我这个问题,我对 PHP 很陌生,在任何地方都找不到我的问题的答案。

我需要在我使用 javascript 和 AJAX 设置的定时内部不断更新从用户到服务器的数据。

有没有办法设置php,这样一旦连接到服务器,它就会保持连接打开并继续接受新数据,直到我告诉它关闭?

【问题讨论】:

标签: javascript php mysql pdo


【解决方案1】:

为什么要保持连接打开?

当您第二次发送数据时,该页面的新实例将在服务器上的 PHP 中运行并继续处理您的请求。数据库连接一旦打开就应该在事务发生后立即关闭,否则它不会释放资源以供其他查询运行。

假设有 2 个用户在使用您的应用程序,如果第一个用户开始发送一些数据,然后在发送更多数据之前等待,并且服务器保持与数据库的连接打开,那么用户 2 将无法处理它请求,因为数据库当前被用户 1 的请求占用。

我强烈建议您为每组数据单独打开和关闭连接。

【讨论】:

    【解决方案2】:

    我认为您真正需要的是单例数据库连接模型,因此:您将获得一个静态实例以供重用。

    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);
        }
    }
    

    【讨论】:

    • 这仍然会在每个请求上打开一个新连接。
    • 是的,但它可能有助于在同一脚本中重复利用数据库实例。
    【解决方案3】:

    你可以为 MySQL 设置一个persistent connection

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

    但是,Web 应用程序中的持久连接可能会产生严重的问题。有关持久性数据库连接的详细讨论,请参阅此处的 What are the disadvantages of using persistent connection in PDO 主题。

    在 MySQL 中,创建和关闭数据库连接没有显着的开销,因此每次调用 php 脚本时只需建立一个新连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多