请原谅我这个问题,我是PHP的新手,我无法在任何地方找到问题的答案。
我需要在我使用javascript和AJAX设置的定时内部中将数据从用户连续更新到服务器。
是否有设置php以便一旦连接到服务器,它将保持连接打开并继续接受新数据,直到我告诉它关闭?
答案 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);
}
}