PDO 连接失败

PDO Connection fails

这是我的数据库连接代码,当我不打算将它放在 class 的函数中时,它可以工作,但如果它的内部函数它不知道?

class DBConnection {

private $connection;

function __construct(){
  $this->open_connection();
}

public static function open_connection(){

  try {
      $connection = new PDO('mysql:host=localhost;dbname=practice','root','');
      $connection->exec("SET NAMES 'utf8'");
      $connection->exec("SET CHARACTER SET utf8");
      $connection->exec("SET character_set_server=utf8");
      $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      return $connection;

  } catch (Exception $e) {
    die($e->getMesage());

  }

}

}// class ends

我认为你的代码中的问题是你使用静态函数 return 连接和你的构造函数没有分配给你的私有变量

使用私有 $connection 的第一个解决方案:

class DBConnection {

private $connection;

function __construct(){
  $this->connection = $this->open_connection();
}

public static function open_connection(){

  try {
      $connection = new PDO('mysql:host=localhost;dbname=practice','root','');
      $connection->exec("SET NAMES 'utf8'");
      $connection->exec("SET CHARACTER SET utf8");
      $connection->exec("SET character_set_server=utf8");
      $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      return $connection;

  } catch (Exception $e) {
    die($e->getMesage());

  }

}

seconde 静态连接

class DBConnection {

private static $connection = null;

function __construct(){
  if (self::$connection == null) 
        $this->open_connection();
}

public static function open_connection(){

  try {
      self::$connection = new PDO('mysql:host=localhost;dbname=practice','root','');
      self::$connection->exec("SET NAMES 'utf8'");
      self::$connection->exec("SET CHARACTER SET utf8");
      self::$connection->exec("SET character_set_server=utf8");
      self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  } catch (Exception $e) {
    die($e->getMesage());

  }

}

希望能帮到你。