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

时间:2016-05-11 04:05:16

标签: php mysql pdo connection

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

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;  
   }
 }
 ?>

感谢您的任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

您是否尝试删除DSN中的所有空白区域?类似的东西:

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

答案 1 :(得分:0)

试试这个例子

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;