Php PDO::_construct():MySQL服务器已离开
这似乎是一个常见的问题,我读过很多关于它的文章,试图使用“ini_set”来更改超时,但仅在5秒钟后仍然出现此错误。下面是我的代码示例,用于显示类之间的流 最让我困惑的是,即使在页面刷新之后,它也会在5秒钟后抛出此警告,但它仍然会从数据库中检索数据Php PDO::_construct():MySQL服务器已离开,php,mysql,pdo,Php,Mysql,Pdo,这似乎是一个常见的问题,我读过很多关于它的文章,试图使用“ini_set”来更改超时,但仅在5秒钟后仍然出现此错误。下面是我的代码示例,用于显示类之间的流 最让我困惑的是,即使在页面刷新之后,它也会在5秒钟后抛出此警告,但它仍然会从数据库中检索数据 require('../cfg/config.php'); class Process { /** * @var PDO */ private $conn = null; /** *
require('../cfg/config.php');
class Process {
/**
* @var PDO
*/
private $conn = null;
/**
* @var PDOException
*/
public $error = null;
private $host = DB_SERVER;
private $user = DB_USER;
private $pass = DB_PASS;
private $db = DB_NAME;
public function __construct() {
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
$this->connect();
}
private function connect() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->db;
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$this->conn = new PDO($dsn, $this->user, $this->pass, $options);
} catch(PDOException $e) {
$this->error = $e->getMessage();
}
return $this->conn;
}
public function query($sql, $params = null) {
preg_match('/SELECT/', $sql) ? $select = true : $select = false;
$connect = $this->conn->getAttribute(PDO::ATTR_CONNECTION_STATUS);
echo "CONNECTION STATUS::: " . $connect;
if($this->error == null) {
$query = $this->conn->prepare($sql);
$query->execute($params);
$query ? (!$select ? $results = true : $results = $query->fetchAll(PDO::FETCH_ASSOC))
: $results = false;
} else {
$results = $this->error;
}
return $results;
}
}
class Arrays {
public $family = [];
/**
* @var \Process
*/
private $db;
public function __construct() {
$this->db = new Process();
}
public function setFamily() {
$a = [];
$sql = "SELECT familyNick, familyName FROM budget.family ORDER BY familyOrder";
$query = $this->db->query($sql);
if($query != false && is_array($query)) {
foreach($query as $k => $v) {
$a[$v['familyNick']] = $v['familyName'];
}
}
$this->family = $a;
}
/**
* @return array
*/
public function getFamily() {
if(empty($this->family) || !isset($this->family)) {
$this->setFamily();
}
return $this->family;
}
}
class Options {
public $family = [];
/**
* @var \Arrays
*/
private $arrays;
public function __construct() {
$this->arrays = new Arrays();
}
public function setFamily() {
$this->family = $this->arrays->getFamily();
}
public function getFamilyOptions() {
if(empty($this->family)) {
$this->setFamily();
}
$options = [];
foreach($this->family as $famNick => $famName) {
$options[] = "<option class='family' value='$famNick'>" . $famName . "</option>";
}
return $options;
}
}
$test = new Options();
$family = $test->getFamilyOptions();
var_dump($family);
我确信这段代码有各种各样的设计缺陷。我现在只关心PDO警告。我只是想简单地删除它
ATTR_PERSISTENT => true
从选项数组中执行此操作 也许这会有所帮助:仍然会遇到同样的问题。我已尝试在connect方法中将$conn设置为null。我已经从_构造中取出了connect方法。我在查询后将conn变量设置为null,然后在查询后尝试取消设置conn变量。仍然得到同样的结果。思想????