Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO::_construct():MySQL服务器已离开_Php_Mysql_Pdo - Fatal编程技术网

Php PDO::_construct():MySQL服务器已离开

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; /** *

这似乎是一个常见的问题,我读过很多关于它的文章,试图使用“ini_set”来更改超时,但仅在5秒钟后仍然出现此错误。下面是我的代码示例,用于显示类之间的流

最让我困惑的是,即使在页面刷新之后,它也会在5秒钟后抛出此警告,但它仍然会从数据库中检索数据

    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变量。仍然得到同样的结果。思想????