Ir para conteúdo
duduAlbuquerque

Acentos MYSql + PHP + PDO select <> Insert

Recommended Posts

Olá Pessoal, quebrando a cabeça pela primeira vez com acentuação.

Já procurei nos tópicos existentes mas não encontrei nada dessa forma.

o que foi feito:

1 - Importei para MySql um banco do SQLServer;

2 - no PHPAdmin as informações nos campos das tabelas aparecem normalmente com acentos; ex. [ Álcool, Açucar e etc ]

3 - Usando PDO->query(Select...  retorna os acentos de forma errada; [ �lcool etc...]

O QUE EU FIZ

1 - Criei um INSERT para testar e dai funcionou. inseriu campos com acento ex. [ água, Álcool e etc]

SURPRESA

1 - Quando sou o SELECT agora os campos antigos importados do SQLServer aparecem errados ex.[ �lcool etc...]

e os novos dados ficam corretos, só que pesquisando pelo phpadmin todos aparecem com acentos.

FIZ OUTRO TESTE

1 - Utilizei o utf8_encode($linhas['campo']), dai, agora inverteu, os novos dados aparecem com caracteres especiais e os antigos

aparecem normalmente

 

se alguém já passou por isso ou souber como resolver, ficarei grato pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoa, resolvi meu problema:

 

Depois de cansativas trocas de collection charset de um lado para outro, acredito até que ja está até repetindo soluções, resolvi verificar o motor de buscas, que estava em MyISAM dai troquei por InnoDB e pronto, tudo resolvido tanto os arquivos antigos importados do SQLServer quanto os novos estão acentuando corretamente.

 

OBS: sei e entendo da diferença entre as engines, apenas postei o que fiz e funcionou, quando volto para MyISAM continua o mesmo problema.

 

Se alguém sou explicar o porquê dessa situação, vale a pena compartilhar com o pessoal!!!!

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 oscar009
      Olá pessoal,
       
      Eu estou tendo um grande problema com a acentuação nos resultados do banco de dados.
      As palavras não vem acentuadas e já não sei mais o que fazer, pois procurei alguma ajuda na internet mas não consegui nenhum resultado.
      Alguém pode me ajudar e informar onde é que eu estou errando !
       
      segue abaixo as imagens com o problema que estou tendo.
      Agradeço muito ai a quem puder me ajudar a solucionar esse problema.
       
      conexão com o banco de dados.

       
      a criação da tabela e a consulta.

       
      o resultado impresso no navegador

      a versão do php e do mysql.

       
       
    • Por marcossantana10
      Boa noite, galera.
       
      Meu problema é o seguinte: tenho um script pra listar os diretórios e os arquivos de dentro desse diretório.
      Acontece que tenho problema de codificação e na listagem ele não interpreta os caracteres especiais como acentos e cedilhas, com isso, acaba não encontrando o caminho do arquivo.
       
      Até consegui resolver o problema da exibição do nome do arquivo na aplicação usando o utf8_decode, mas, mesmo mostrando o nome corretamente, quando clico pra abrir o arquivo, ele não encontra. É como se ele mostrasse o caractere correto mas interpretasse de uma forma diferente com o utf8_decode.
       
      Alguma sugestão?
       
      Segue abaixo o script. 
      <?php $baseDir = 'transparencia/'.$dirDinamico; $abreDir = (@$_GET['dir'] != '' ? $_GET['dir'] : $baseDir); $strrdir = strrpos(substr($abreDir,0,-1),'/'); $backdir = substr($abreDir, 0,$strrdir+1); $openDir = dir($abreDir); while($arq = $openDir -> read()):     if($arq != '.' && $arq != '..'):         if(is_dir($abreDir.$arq)){             echo '<div class="grid-1-3">';             echo '<div class="transparencia-box">';             ?>             <div class="conteudo-box-transparencia">                 <div class="icone-pasta"><a href="<?php echo '?cat='.$categoria.'&dir='.$abreDir.$arq.'' ?>"><img src="img/folder-icon.png"></a></div>                 <div class="titulo-pasta"><span><a href="<?php echo '?cat='.$categoria.'&dir='.$abreDir.$arq.'' ?>"><?php echo $arq ?></a></span></div>             </div>             <?php             echo '</div>';             echo '</div>';         }else{             echo '<div class="grid-1-3">';             echo '<div class="transparencia-box">';             $caminho_arquivo = $abreDir.'/'.$arq;             ?>                 <div class="conteudo-box-transparencia">                 <div class="icone-pdf-transparencia"><a target="_new" href="<?php echo $caminho_arquivo ?>"><img src="img/pdf-transparencia.png"></a></div>                 <div class="titulo-pasta"><span><a target="_new" href="<?php echo $caminho_arquivo ?>"><?php echo strtoupper($arq); ?></a></span></div>             </div>             <?php             // echo '<a target="_new" href="'.$abreDir.'/'.$arq.'">'.strtoupper($arq).'</a><br>';             echo '</div>';             echo '</div>';         }     endif; endwhile;  
       
       
    • Por rraquel
      Estou tendo problemas com acentuação em Python. Está apresentando a seguinte falha:
       
      UnicodeEncodeError: 'ascii' codec can't encode character u'\xf5' in position 370: ordinal not in range(128)
       
      Estou usando python 3
    • Por nocrovaldo
      Saudações galera!
      Sou Marcos Sá, e estou a muitos meses aprendendo sobre HTML5 - CSS - PHP - AJAX .. Eu sei que é pouco tempo de aprendizado para essa nova Skil que estou gravando em minha massa massa encefálica. Vamos ao caso.
       
      1 - Meu site está hospedado na locaweb.
      2 - Com a ajuda do google, encontrei um form bacana para iniciar.
      3 - Minha ideia inicial era enviar os dados via POST sem dar refresh na página toda, e sim somente, na section do form propriamente dita.
      4 - Outra questão era colocar o "reCAPTCHA", da google, para evitar os malas de plantão.
      5 - E que todo o site fosse responsivo.
       
      O problema: 
      Toda vez que o form é enviado os acentos não são respeitados. Vai que vai na loucu~~12~3ra só heheh
       
      Segue as declarações do php em questão abaixo:
      <?php // require ReCaptcha class require('recaptcha-master/src/autoload.php'); // configure if (isset($_POST['txtdest'])) { // $destino = $_POST['txtdest']; // $assunto = $_POST['txtass']; // $mensagem = $_POST['txtmsg']; if (PATH_SEPARATOR ==":") { $quebra = "\r\n"; } else { $quebra = "\n"; } $headers = "MIME-Version: 1.1".$quebra; $headers .= "Content-type: text/html; charset=utf-8" .$quebra; $headers .= "From: contato@site.com.br".$quebra; $headers .= "Return-Path: "; } $sendTo = 'Site <contato@site.com.br>'; $subject = 'Contato Pelo Site'; $fields = array('name' => 'Name', 'message' => 'Message'); // array variable name => Text to appear in the email $okMessage = 'Formulário enviado com sucesso.'; $errorMessage = 'Houve um erro no envio, por favor, verificar o reCAPTCHA.'; $recaptchaSecret = '********************'; // let's do the sending try { if (!empty($_POST)) { // validate the ReCaptcha, if something is wrong, we throw an Exception, // i.e. code stops executing and goes to catch() block if (!isset($_POST['g-recaptcha-response'])) { throw new \Exception('ReCaptcha is not set.'); } // do not forget to enter your secret key in the config above // from https://www.google.com/recaptcha/admin $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost()); // we validate the ReCaptcha field together with the user's IP address $response = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); if (!$response->isSuccess()) { throw new \Exception('ReCaptcha was not validated.'); } // everything went well, we can compose the message, as usually $emailText = "Nova Mensagem.\n=============================\n"; foreach ($_POST as $key => $value) { if (isset($fields[$key])) { $emailText .= "$fields[$key]: $value\n"; } } mail($sendTo, $subject, $emailText, $headers, "-r". "contato@site.com.br"); $responseArray = array('type' => 'success', 'message' => $okMessage); } } catch (\Exception $e) { $responseArray = array('type' => 'danger', 'message' => $errorMessage); } if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $encoded = json_encode($responseArray); header('Content-Type: application/json'); echo $encoded; } else { echo $responseArray['message']; }  
      Nota* = Todos os Html
       estão com a declaração <meta charset="utf-8">
       
      Nota** = no php.ini também está declarado da seguinte forma:
       default_charset = "utf-8"
      internal_encoding = 'utf-8'
      output_encoding = 'utf-8'
       
      Onde será que estou pecando amigos? 
    • Por Victor Penna
      Boa noite pessoal, novamente venho aqui pedir ajuda para vocês... 
       
      Passando as informações gerais, estamos criando uma API REST usando codeigniter para comunicar um app android a um banco de dados, atualmente meu projeto está andando muito bem, porém tem alguns detalhes que desejo ajeitar que não entendo como fazer, para enfim terminar o projeto:
      1. Quando faço requisições em GET ou POST, tendo o retorno dos dados, caso seja uma palavra que tenha acento ou seja um carácter especial(ç), ele retorna respostas desconfiguradas. Como posso resolver isso?(Usamos maquinas virtuais com debian 8.6 e LAMP e serviços xampp ou wamp para colegas com maquinas com menos potência).
      2. Mesmo seguindo a documentação do framework, tenho tentando retirar a o acesso pela pagina "index.php" como parte da rota, mas não tenho conseguido. Como devo tentar ou fazer para ter o acesso direto pela rota configurada?  Seguem link da instrução que fiz...retirar index.php da rota de acesso.
      3. Gostaria de tentar implementar na minha API algum tipo de segurança encriptando o link da uri, para não facilitar o acesso externo, sabem informar como devo proceder?
      4. Atualmente usamos acesso ao banco de dados pela "msqli" no arquivo database.php, do codeigniter, mas gostaria de usar a biblioteca PDO na conexão deixando-a mais segura. Porém realmente não achei muita informação sobre o uso ou como implementar... Até tentei com esse link, mas não deu muito certo... PDO no Codeigniter.
      5. Alguém ja montou uma API REST de comunicação com app Android com codeigniter? Pergunto, pois estou no processo de montagem finalização dele, contudo ainda tenho uma dúvida crucial quanto isso. Justamente nas entradas e saídas de informação via requisição http, pois realmente não entendo muito de android, mas cada vez que tenho de testar a função rest preciso fazer uma certa "gambiarra" de código.. Por exemplo, nesse controller:
      <?php defined('BASEPATH') OR exit('No direct script access allowed'); require APPPATH . 'libraries/REST_Controller.php'; class Padaria extends REST_Controller{ public function __construct(){ parent::__construct(); $this->load->model('Padaria_model'); } public function padarias_info_get(){ $info = $this->get(); $padaria = json_decode($info); $perfil_padaria = $this->Padaria_model->padaria_perfil($padaria); $this->response($perfil_padaria); } } Eu deveria setar o objeto de recebimento das informações para fazer receber as informações em json, mas como não sabemos ainda porque a equipe de desenvolvimento do projeto android ainda não terminou o APP, fazemos os testes assim...
       
      <?php defined('BASEPATH') OR exit('No direct script access allowed'); require APPPATH . 'libraries/REST_Controller.php'; class Padaria extends REST_Controller{ public function __construct(){ parent::__construct(); $this->load->model('Padaria_model'); } public function padarias_info_get(){ $info = $this->get(json_encode('HTTP_REQUEST')); $padaria = json_decode($info); $perfil_padaria = $this->Padaria_model->padaria_perfil($padaria); $this->response($perfil_padaria); } Para conseguirmos receber e testar as informações enviadas pelo POSTMAN, existe outra maneira mais rápida? ou o código está montado corretamente e essa é a melhor forma?
      6. Temos uma função de validação de dados, usando a libraries form_validation do codeigniter, mas encontramos um problema recentemente... Toda vez que enviamos o json, ele apresenta esse erro: 
      Message: Argument 1 passed to CI_Form_validation::set_data() must be of the type array, string given, called in C:\wamp\www\padatec-teste\application\models\Empresa_Model.php on line 52 and defined Mas dai vem a pergunta: um pacote json já num é uma array de informações? Preciso transformar as informações antes de repassar para função que usar a form_validation?
      6a. Existe uma set_rules na função de cadastro que não é obrigatório o preenchimento, posso retirar o required dela ou como devo proceder para não passar essa informação de forma ocasional?
      Segue o código:
      <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Padaria_model extends CI_Model { public function __construct() { parent::__construct(); $this->load->database('xxxxx'); $this->load->libraries('form_validation'); } public function padaria_perfil($padaria){ $this->db->select('nome_cliente','cpf','rua','numero','complemento','cep,','bairro','cidade')->from('empresa')->where('cnpj',$padaria); return $this->db->get()->result_array(); } public function registro($cadastro){ if (!isset($cadastro)) { $response['status'] = false; $response['message'] = "Dados não informados, por favor informe todos os dados."; } else { // setamos os dados que devem ser validados $this->form_validation->set_data($cadastro); // definimos as regras de validação $this->form_validation->set_rules('nome_empresa','Nome','required|min_length[2]|trim'); $this->form_validation->set_rules('razao_social', 'RAZÃO SOCIAL', 'trim|required'); $this->form_validation->set_rules('cnpj', 'CNPJ', 'trim|required'); $this->form_validation->set_rules('telefone', 'TELEFONE', 'trim|required'); $this->form_validation->set_rules('rua', 'RUA', 'trim|required'); $this->form_validation->set_rules('numero', 'NÚMERO', 'trim|required'); $this->form_validation->set_rules('cep', 'CEP', 'trim|required'); $this->form_validation->set_rules('bairro', 'BAIRRO', 'trim|required'); // $this->form_validation->set_rules('complemento', 'COMPLEMENTO', 'trim|required'); Essa set_rules desejo deixar ocasional!!! $this->form_validation->set_rules('cidade', 'CIDADE', 'trim|required'); $this->form_validation->set_rules('estado', 'ESTADO', 'trim|required'); // executamos a validação e verificamos o seu retorno // caso haja algum erro de validação, define no array $response // o status e as mensagens de erro if ($this->form_validation->run() === false) { $response['status'] = false; $response['message'] = validation_errors(); } else { // criptografamos a senha $status = $this->db->insert('empresa', $cadastro); // verificamos o status do insert if ($status) { $response['status'] = true; $response['message'] = "Usuário inserido com sucesso."; } else { $response['status'] = false; $response['message'] = $this->db->'error'; } } } // retornamos as informações sobre o insert return $response; } } ?> 7. Criamos uma função delete, contudo tanto ela como a função update sempre retornam TRUE, atualizando e deletando ou não na tabela do banco de dados. A unica forma que entendi que para resolver essa situação foi usando tipo rows_effect para checar as colunas e valores, porém o código ficou um pouco 'feio', teria uma forma melhor de fazer?
      Segue o código:
      $this->db->where('id', $id); $this->db->where('status_pedido', 0); $sucess = $this->db->delete('pedido'); if ($this->db->affected_rows() > 0) { return "pedido ". $id. " excluido com sucesso"; } else { return " falha ao excluir o pedido ". $id; } }  
      No mais pessoal, essas são as dúvidas que sobre todo o projeto que tivemos até agora. 
      Fico muito agradecido por todos terem ajudado até agora pessoal, foi o forum imaster que ajudou nesse projeto da faculdade, agora só falta os detalhes.
      Grande abraço a todos pessoal.
×

Informação importante

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