Ir para conteúdo
Carcleo

conexão remota não funciona. Só local

Recommended Posts

Estou recebendo esse erro do servidor ao tentar conectar via PDO com o mysql no link abaixo

http://funerariasaopedro.net.br/crud/   

 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] 
    Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)' 
    in /var/www/html/funerariasaopedro.net.br/web/crud/_conexao/Conexao.php:33 
    Stack trace: #0 /var/www/html/funerariasaopedro.net.br/web/crud/_conexao/Conexao.php(33): 
    PDO->__construct('mysql:?????????...', 'carcleo', 'teste') 
    #1 /var/www/html/funerariasaopedro.net.br/web/crud/cadastraPlanos.php(9): CONEXAO\Conexao->__construct() 
    #2 /var/www/html/funerariasaopedro.net.br/web/crud/index.php(27): require_once('/var/www/html/f...') 
    #3 {main} thrown in /var/www/html/funerariasaopedro.net.br/web/crud/_conexao/Conexao.php on line 33

Classe de conexão:

    <?php
      
      namespace CONEXAO;
      
      use PDO; 
       
      class Conexao {
          
          private static $conexao;

          private static $hostname     = "server";     
          private static $port         = 3306; 
          private static $dbname       = "db";
          private static $username     = "user";
          private static $password     = "senha";

          
          public function __construct() {
            
            if (isset(self::$conexao))         {
             
                self::$conexao = self::$conexao;
                
            }  else {        
    
              
              try {
    
                 self::$conexao = new PDO('mysql:
                             host='.self::$hostname.';
                             port= '.self::$port.';
                             dbname='.self::$dbname, 
                             self::$username, 
                             self::$password
                                         );
    
              } catch (Exception $e) {
    
                self::$conexao = NULL;
    
                echo $e->getMessage();
    
              } 
    
            }
              
          }
          
          public function abreConexao() {
              
              return self::$conexao;
              
          }
    
        
          public function fechaConexao () {
              
              if (self::$conexao != null) {
                  
                  self::$conexao = null;
                  
              }
    
          }      
    
      }

O que pode ser isso?

Obs.: O mesmo código localmente funciona e os dados de conexão estão corretos no servidor.

As senhas do servidor já foram testadas ok.

 

A classe abaixo, com os mesmos dados, funciona:

<?php
 
 class Conexao {
   
    private $host     = "server";     
    private $user     = "user";
    private $password = "senha";
    private $db       = "db";
   
    
    private $conexao;
    
    public function abreConexao() {
        
        if (isset($this->conexao))         {
         
            return $this->conexao;
            
        }  else {        

                $this->conexao = new mysqli($this->host, $this->user, $this->password, $this->db);

                $this->conexao->set_charset("utf8");    

                return $this->conexao;
        }

    }
    
    public function fechaConexao () {
        
        if ($this->conexao != null) {
            
            $this->conexao = null;
            
        }
    }

  }

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porta 3306 geralmente é usada por 127.0.0.1 por isso funciona local, mas quando hospeda a porta de acesso não é essa, daí o erro.

Tente remover a porta, pois PDO vai usar a padrão (caso liberada para acesso público), do contrário você vai ter que especificar a porta do socket do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem a porta eu já tentei e deu erro também.
Vou contatar o servidor do UOL HOST e ver como eles qual a porta que eles usam

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valide se o socket existe no caminho informado:

/var/lib/mysql/mysql.sock

Caso ele não existir, procure o arquivo no servidor e altere o php.ini para o local correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia já tentou Verifique o endereço do server, usuário e senha e Certifique-se de estar executando o

mysqld: /etc/init.d/mysqld start

 

1°Solucao

Se o seu arquivo my.cnf (normalmente na pasta / etc / mysql /) estiver corretamente configurado

socket = / var / lib / mysql / mysql.sock


você pode verificar se o mysql está rodando com o seguinte comando:

mysqladmin -u root -p status


tente mudar sua permissão para a pasta mysql. Se você estiver trabalhando localmente, poderá tentar:

sudo chmod -R 755 / var / lib / mysql /

 

2°Solução

renomear o arquivo existente para um nome qualquer exemplo

 

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

e Novamente Reniciar

/etc/init.d/mysqld restart

3° Solução

Faça a seguintes modificações

sudo gksu gedit /etc/mysql/my.cnf


modificado

# bind-address = 127.0.0.1


para

bind-address = localhost


e reiniciado

sudo /etc/init.d/mysql restart

 

4° Solução

Tente o seguinte Comando

mysql -h 127.0.0.1 -P 3306 -u root -p

 

-h significa host e -p significa porta.


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo assim não dá certo. Lembrando que sem PDO funciona normalmente.

 

Isto é:  new mysqli(...)

 

]com os mesmos dados de coeexao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É a porta, com certeza.

Testa aí para você ver se não é a porta...

Connect.php

Spoiler

<?php
class Connect {
    private static $host = 'host';
    private static $user = 'login';
    private static $pass = 'senha';
    private static $data = 'database';
    private static $isConnect = null;

    private static function makeConnect() {
        try {
            if (self::$isConnect == null) {
                $dsn = 'mysql:host=' . self::$host . '; dbname=' . self::$data;
                $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
                self::$isConnect = new PDO($dsn, self::$user, self::$pass, $options);
            }
        } catch (PDOException $error) {
            die("<br>Não foi possível conectar com o banco de dados!<br> Descrição: {$error->getMessage()}<br>");
        }
        self::$isConnect->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return self::$isConnect;
    }

    public function callConnect() {
        return self::makeConnect();
    }
}

 

 

Testando

Spoiler

<?php
require ('Connect.php');

var_dump(Connect::callConnect());

 

 

Se o host/login/pass/db estiverem corretos o resultado será object(PDO)#1 (0) { }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a conexão PDO com mysql conforme abaixo  baseado no teu código:

     $dsn = 'mysql:host=' . self::$hostname . '; dbname=' . self::$dbname;
     $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
    
     self::$conexao = new PDO( 
                      $dsn,
                      self::$username, 
                      self::$password, 
                      $opcoes
                              );

que funciona perfeitamente.

 

Mas se eu colocar o conteúdo da variável $dsn junto à string de conexão conforme abaixo dá erro que me parece ser de concatenação.

 

   Por favor me ajuda a descobrir onde está esse erro?

    $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
    
     self::$conexao = new PDO( "mysql:
                      host=" . self::$hostname . "; 
                      dbname=" . self::$dbname,
                      self::$username, 
                      self::$password, 
                      $opcoes
                              );

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro estava em que na variável que abriga o DSN NÃO pode haver quebras de linha.

 

Soução:

new PDO( "mysql:host=".self::$hostname.";dbname=". self::$dbname, self::$username, self::$password, $opcoes);
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por PlatBubbles
      Ola, estou tendo dificuldade para fazer uma consulta seletiva usando duas tabelas, provavelmente estou errando a sintaxe da busca, agradeço caso alguem possa me passar a forma correta de fazer a busca.
       
      $sqluser = "SELECT aquestion_id, user_id FROM respostas WHERE user_id like '$logado' UNION SELECT * pergunta, question_id FROM questions WHERE question_id!=aquestion_id ORDER BY RAND() LIMIT 1"; Explicando
      Na tabela respostas preciso dos dados aquestion_id e user_id apenas do usuário Logado.
      Da tabela questions preciso da pergunta e da question_id que deve ser gerada de forma aleatória mas apenas com os Ids que não estejam  listados em aquestion_id.
      Na verdade as duas tabelas tinham o campo question_id porem estava confuso e por isso mudei o campo da primeira tabela para aquestion_id.
       
      Agradeço qualquer ajuda, e também pelo tempo dos que leram mesmo se não puderam ajudar.
      PlatBubbles
    • Por MateusOFCZ
      Olá, eu criei uma página de publicidade, porém não fluiu como eu queria, então coloquei essa página em uma DIV, alguém poderia me informar se irá funcionar caso eu faça um sistema para ocultar essa DIV depois de 10 segundos?
      <!--- Publicidade ------> <div id="publicidadediv"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title><?= $config['hotelName'] ?> - Publicidade</title> <script src="/templates/GalaxyServers/client/js/jquery-latest.js" type="text/javascript"></script> <script src="/templates/GalaxyServers/client/js/jquery-ui.js" type="text/javascript"></script> <script src="/templates/GalaxyServers/client/js/spacehotel2018.js"></script> <script src="/templates/GalaxyServers/client/js/flash_detect_min.js"></script> <script src="/templates/GalaxyServers/client/js/client.js" type="text/javascript"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="icon" type="image/png" href="<?= $config["favicon"];?>"> </head> <body> <body style="background-color:black;"> <center><img src="https://i.imgur.com/kHdzpqq.png" style="width:396px;height:91px;"></center> <center><?php $imagens = array(); $imagens[] = '<a href="https://hobbyhotel.club/hotel?room=255" target="_blank"><img src="https://i.imgur.com/O0gSito.png" style="width:330px;height:250px;"></a>'; $imagens[] = '<a href="https://hobbyhotel.club/hotel?room=255" target="_blank"><img src="https://i.imgur.com/O0gSito.png" style="width:330px;height:250px;"></a>'; $chave = array_rand($imagens); $imagem = $imagens[$chave]; echo $imagem; ?></center> <center><img src="https://i.imgur.com/9FH4A5O.png" style="width:396px;height:91px;"></center> </body> </div> <!--- Publicidade ------> Gostaria de sabem também como faço para ocultar tudo isso após X segundos...
    • Por Devlong
      Estou com esse erro quando tento usar PHP 7.1 ( no PHP 5.6 não dar erro )
       
      rsslib.php
      <?php $RSS_Content = array(); function RSS_Tags($item, $type = 1, $channel_name="", $image="") { $y = array(); $tnl = $item->getElementsByTagName("title"); $tnl = $tnl->item(0); $title = $tnl->firstChild->textContent; $tnl = $item->getElementsByTagName("link"); $tnl = $tnl->item(0); $link = $tnl->firstChild->textContent; $tnl = $item->getElementsByTagName("pubDate"); $tnl = $tnl->item(0); $date = $tnl->firstChild->textContent; $y["channel"] = $channel_name; $y["title"] = $title; $y["link"] = $link; $y["date"] = $date; $y["type"] = $type; $y["image"] = $image; return $y; } function RSS_Channel( $channel, $key ) { global $RSS_Content; $items = $channel->getElementsByTagName("item"); $y = RSS_Tags($channel, 0); $channel_name = $y['title']; foreach($items as $item) { $y = RSS_Tags($item, 1, $channel_name, $key); array_push($RSS_Content, $y); } } function RSS_Retrieve( $urls = array() ) { global $RSS_Content; $RSS_Content = array(); foreach ( $urls as $key => $url ) { $doc_{$key} = new DOMDocument(); $doc_{$key}->load( $url ); $channels_{$key} = $doc_{$key}->getElementsByTagName("channel"); foreach( $channels_{$key} as $channel ) { RSS_Channel( $channel, $key ); } } } function RSS_RetrieveLinks($url) { global $RSS_Content; $doc = new DOMDocument(); $doc->load($url); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { $items = $channel->getElementsByTagName("item"); foreach($items as $item) { $y = RSS_Tags($item, 1); array_push($RSS_Content, $y); } } } function RSS_Links($url, $size = 15) { global $RSS_Content; $page = "<ul>"; RSS_RetrieveLinks($url); if($size > 0) $recents = array_slice($RSS_Content, 0, $size + 1); foreach($recents as $article) { $type = $article["type"]; if($type == 0) continue; $title = $article["title"]; $link = $article["link"]; $page .= "<li><a href=\"$link\">$title</a></li>\n"; } $page .="</ul>\n"; return $page; } function RSS_Display( $urls=array(), $size = 15, $site = 0 ) { global $RSS_Content; $site = 0; $site = (intval($site) == 0) ? 1 : 0; RSS_Retrieve( $urls ); RSS_Sort(); if($size > 0) { $recents = array_slice($RSS_Content, 0, $size); } return $recents; } function RSS_Sort() { global $RSS_Content; for( $i =0; $i < count( $RSS_Content ); $i++ ) { $array = array(); for( $j =$i+1; $j < count( $RSS_Content ) - $i; $j++ ) { if( strtotime($RSS_Content[$i]['date']) < strtotime($RSS_Content[$j]['date']) ) { $temp = array( 'channel' => $RSS_Content[$i]['channel'], 'title' => $RSS_Content[$i]['title'], 'link' => $RSS_Content[$i]['link'], 'date' => $RSS_Content[$i]['date'], //'description' => $RSS_Content[$i]['description'], 'image' => $RSS_Content[$i]['image'], 'type' => $RSS_Content[$i]['type'], ); $temp2 = array( 'channel' => $RSS_Content[$j]['channel'], 'title' => $RSS_Content[$j]['title'], 'link' => $RSS_Content[$j]['link'], 'date' => $RSS_Content[$j]['date'], //'description' => $RSS_Content[$j]['description'], 'type' => $RSS_Content[$j]['type'], 'image' => $RSS_Content[$j]['image'], ); $RSS_Content[$i] = $temp2; $RSS_Content[$j] = $temp; } } } } ?>  
    • Por martinazzo
      não consigo apagar, então deixei assim... se alguém conseguir por favor
    • Por kelvinferraz
      Boa tarde pessoal,
       
      Estou com uma dúvida e dificuldade para realizar algo que talvez seja simples para muitos, eu gostaria de gerar uma tabela numerada de 1...X porém somente quando o usuario selecionar um checkbox ele irá assumir um número, por exemplo

       
      <tr> <td class="border border-dark"> numeracao_automatica </td> <td class="border border-dark"> '. $opcaovindadocheckbox .' </td> </tr> Caso o usuario nao selecione nenhuma checkbox ele não irá atribuir nenhum número, outra coisa é se ele selecionar aleatoriamente uma lista do chekbox, ele ir numerando conforme a seleção
       
      Se alguém tiver alguma ideia ou maneira simples ou dificil de resolver ficarei extremamente grato.
       
      Obrigado a todos!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.