通过PDO连接Mysql时出错,但使用基本的mysqli命令SQLSTATE[HY000][2002]时出错


Error when connecting Mysql thru PDO, but not when using basic mysqli commands SQLSTATE[HY000] [2002]

两个连接类都在同一项目下:

1) 第一类运行良好,一切正常:

<?php
class DAO{
    protected $servidor;
    protected $base;
    protected $usuario;
    protected $senha;
    protected $conexao;
    public function __construct(){
        $this->base = "ima";
        $this->usuario = 'admin';
        $this->senha = 'wd4567';
        $this->servidor = 'localhost';
        $this->abrirConexao();
        $this->selecionar();        
    }
    protected function abrirConexao(){
        $this->conexao = mysqli_connect($this->servidor, $this->usuario, $this->senha);
        if (!$this->conexao) {
            die("Connection failed: " . mysqli_connect_error());
        }
//      echo "Connected successfully";
        mysqli_set_charset($this->conexao, "utf8");

    }

2) 使用PDO的第二个连接类返回错误:SQLSTATE[HY000][2002]没有这样的文件或目录。但就我所见,数据集是一样的。。。请在以下方面寻求帮助:

<?php
/*  
  * Constantes de parâmetros para configuração da conexão  
  */  
 define('HOST', 'localhost');  
 define('DBNAME', 'ima');  
 define('CHARSET', 'utf8');  
 define('USER', 'admin');  
 define('PASSWORD', 'wd4567');  
 class Conexao {  
   /*  
    * Atributo estático para instância do PDO  
    */  
   private static $pdo;
   /*  
    * Escondendo o construtor da classe  
    */ 
   private function __construct() {  
     //  
   } 
   /*  
    * Método estático para retornar uma conexão válida  
    * Verifica se já existe uma instância da conexão, caso não, configura uma nova conexão  
    */  
   public static function getInstance() {  
     if (!isset(self::$pdo)) {  
       try {  
         $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_PERSISTENT => TRUE);  
         echo("mysql:host=" . HOST . "; dbname=" . DBNAME . "; charset=" . CHARSET . "; ". USER ."  ". PASSWORD . $opcoes);
         self::$pdo = new PDO("mysql:host=" . HOST . "; dbname=" . DBNAME . "; charset=" . CHARSET . "; ", USER, PASSWORD, $opcoes);  
       } catch (PDOException $e) {  
         print "Erro: " . $e->getMessage();  
       }  
     }  
     return self::$pdo;  
   }
 }
 ?>

感谢您在这方面的帮助,谢谢!

您是否尝试删除DSN中的所有空白?类似于:

"mysql:host=" . HOST . ";dbname=" . DBNAME . ";charset=" . CHARSET . ";"

试试这个例子

class Conexao { 
    private static $pdo;
    public static function getInstance() {  
        if (!self::$pdo) {
            self::$pdo = new PDO(
                'mysql:host=localhost;dbname=ima;charset=utf8;',
                'admin',
                'wd4567',
                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                      PDO::ATTR_PERSISTENT => TRUE,
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                ));
        }
        return self::$pdo;  
    }
}
// Create connection
$pdo = Conexao::getInstance();
// Close connection
$pdo = null;