Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Barbosa

Erro : Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

Recommended Posts

Olá pessoal, bom dia a todos.

 

Estou com um problema de acentuação quando uso o PDO, pesquisando, vi que uma opção para solução do problema seria acrescentar na módulo de conexão com o BD a instrução array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"), assim meu código ficou:

 
<?php
define('HOST','localhost');
define('DB','banco');
define('USER','root');
define('PASS','');

$conexao = 'mysql:host='.HOST.';dbname='.DB;

try{
 $conecta = new PDO($conexao,USER,PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
 $conecta->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 $conecta->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

}catch(PDOexception $error_conecta){
 echo 'Erro ao conectar';
}
?>

 

Após o acréscimo da linha aparece o erro:

Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

 

Já olhei no php.ini e a linha extension=php_pdo_mysql.dll, está sem o ponto e vírgula na frente, o php q estou utilizando é o 5.3

 

Existe alguma outra forma que posso resolver esse problema de acentos utilizando o PDO, e com relação a esse erro, o que pode ser ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um bug no PHP 5.3 que faz com que essa constante não exista (poderá ver aqui).

 

Ao invés da constante, utilize seu valor 1002.

 

$conecta = new PDO(
   $conexao,
   USER,
   PASS, 
   array(1002 => "SET NAMES utf8")
);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um bug no PHP 5.3 que faz com que essa constante não exista (poderá ver aqui).

 

Ao invés da constante, utilize seu valor 1002.

 

$conecta = new PDO(
   $conexao,
   USER,
   PASS, 
   array(1002 => "SET NAMES utf8")
);

 

Certo, vlw pela dica, o erro não acontece mais, mas o dados retornado do BD estão com caracteres estranho no lugar do acentos.

ASSOCIA��O BENEFICENTE TAYLOR EG�DIO

 

você sabe me dizer o pq disso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Codificação. Mas não somente a codificação da conexão com o SGBD.

 

No seu caso, você deve cuidar três codificações e mais o collation do SGBD (é raro os casos que o "default" nos "mata").

 

1ª Codificação, do HTML:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Isso deve estar na tag HEAD.

 

2ª Codificação, do arquivo:

O arquivo deve estar salvo com a codificação UTF-8 e sem Byte Order Mark (BOM) também.

 

Caso você utiliza notepad++, é bem fácil visualizá-la. Basta ir na guia Encoding e selecionar Encode in UTF-8 without BOM

 

No Dreamweaver: Ctrl + J e o a codificação (um bem parecido com o de cima)

 

3ª Codificação, da conexão com SGBD:

No seu caso, você já a fez setando para UTF-8.

 

Collation:

Muita gente utiliza Latin1 (ISO-8859-1), mas como você está setando tudo como UTF-8, utilize utf8_general_ci (para case insentive).

 

Isso deve resolver seu problema. Há também um bug no apache, só ouvi alguns desenvolvedores resolvendo sobre ele, nunca pesquisei a fundo. Mas acredito que esse não seja seu caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com os passos acima, não deverá ser necessário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria correto eu colocar o utf8_encode na variável que estou retornando do BD ?

 

Tá tudo muito estranho aqui, todas as configurações que você falou eu já tinha feito exceto no banco que fiz agora, mesmo assim os valores estão retornando com caracteres estranhos.

 

No banco campos estão corretos com seus respectivos acentos e quando faço a edição sem o PDO o retorno é correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá tudo muito estranho aqui, todas as configurações que você falou eu já tinha feito exceto no banco que fiz agora, mesmo assim os valores estão retornando com caracteres estranhos.

 

Crie duplicatas das entradas e teste. Até onde sei, alterar o collation/charset de uma tabela/schema já populado não atualiza os dados existentes, só serve para modificações posteriores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie duplicatas das entradas e teste. Até onde sei, alterar o collation/charset de uma tabela/schema já populado não atualiza os dados existentes, só serve para modificações posteriores.

Ok, vou fazer e posto o resultado.

 

Com os passos acima, não deverá ser necessário.

 

Gabriel, acho que já estou conseguindo, realmente seguindo todos os passos que você me indicou, depois que fiz a alteração no banco começou a funcionar, mas ainda tenho uma dúvida, seguinte, quando edita os dados eles vem certinho mostrando todos os acentos, mas quando olho no banco, está com caracteres estranhos, pode ficar assim ?

 

Vlw e muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tipo de caracteres? Ou apenas códigos simbólicos, tal como:

- á

- ç

- ã

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deveria ser normal. Isso acontece no insert e update ou somente no update?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deveria ser normal. Isso acontece no insert e update ou somente no update?

 

No insert, o update eu estou fazendo agora.

 

No insert, o update eu estou fazendo agora.

No update também fica

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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