在不关闭sql连接的情况下连续输入数据

时间:2016-06-08 12:14:49

标签: javascript php mysql pdo

请原谅我这个问题,我是PHP的新手,我无法在任何地方找到问题的答案。

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

是否有设置php以便一旦连接到服务器,它将保持连接打开并继续接受新数据,直到我告诉它关闭?

3 个答案:

答案 0 :(得分:1)

您可以为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脚本时都要建立一个新的连接。

答案 1 :(得分:0)

为什么要保持连接打开?

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

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

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

答案 2 :(得分:0)

我认为你真正需要它的是一个单独的数据库连接模型,所以:你将得到一个静态实例用于重用。

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