PauloOliveira Posted March 27, 2017 at 10:09 PM Report #603383 Posted March 27, 2017 at 10:09 PM Olá a todos Estou a tentar inserir dados na tabela, e tudo funciona perfeitamente, até que precisei de inserir caracteres especias! bem aqui fica o codigo e o erro, o que estarei a fazer de errado? try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //$conn->exec("SET NAMES 'utf8';"); $sql = "INSERT INTO epocas (alemao, frances, ingles) VALUES ('$alemao', '$frances', '$ingles')"; $conn->exec($sql); echo "New record created successfully"; //header('Location: inserirdados.php'); } catch(PDOException $e) { $conn . "<br>" . $e->getMessage(); } $conn = null; O erro; Recoverable fatal error: Object of class PDO could not be converted to string in C:\xampp\htdocs\Linguas\Backoffice\inserir_epoca.php on line 24 A linha 24 está bem no fundo do código: $conn . "<br>" . $e->getMessage(); Obrigado a todos
devgoncalo Posted March 28, 2017 at 09:08 AM Report #603384 Posted March 28, 2017 at 09:08 AM olá, o código da conexão à bd fica no inserir_epoca.php? não faz sentido. e não podes fazer isto $conn . "<br>", $conn é um objecto e o php não converte para string automaticamente. para veres os dados de $conn podes fazer algo do género: print_r("<pre>"); var_dump($conn); print_r("</pre>"); assim de repente parece que estás a usar o método include para gerires o teu backoffice, sugiro que olhes para o metodo autoload através do composer https://getcomposer.org/. em relação à própria conexão à bd, dá uma vista de olhos em: PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_EMULATE_PREPARES => false se a string que queres inserir não estiver em utf8 podes sempre converter, através de: http://php.net/manual/en/function.utf8-encode.php cumps
PauloOliveira Posted March 28, 2017 at 01:00 PM Author Report #603393 Posted March 28, 2017 at 01:00 PM (edited) Obrigado pela ajuda e sugestões :),sim fica no inserir_epoca.php, e percebo que diga que não faz sentido, mas no entanto é um projecto muito simples e pequeno, para exclusivamente uso próprio e como tal penso que deve ser irrelevante! Não estou a usar método include, isto é apenas um exemplo independente sem qualquer tipo de restrições tipo sessão se é a isso que te referes. Bem, voltando ao erro, já experimentei outras soluções e segui a sugestão, mas no entanto nada mudou, continua sem inserir os caracteres especiais. try { $conn = new PDO("mysql:host=$servername;dbname=$dbname; charset=utf8", $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_EMULATE_PREPARES => false)); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $psql=$conn->prepare( "INSERT INTO epocas (alemao, frances, ingles) VALUES ('$alemao', '$frances', '$ingles')"); //$ps=$conn->prepare($sql); $psql->bindParam('alemao',$alemao,PDO::PARAM_STR); $psql->bindParam('frances',$frances,PDO::PARAM_STR); $psql->bindParam('ingles',$ingles,PDO::PARAM_STR); $psql->execute(); // $conn->exec($conn); echo "New record created successfully"; //header('Location: inserirdados.php'); } catch(PDOException $e) { print_r("<pre>"); var_dump($conn); print_r("</pre>"); } "se a string que queres inserir não estiver em utf8 podes sempre converter, através de:" O que queres dizer? utf8 nao suporta todo o tipo de caracteres? Já gora a string que dá problemas é o " ' ". Obrigado Edited March 28, 2017 at 01:03 PM by PauloOliveira
devgoncalo Posted March 28, 2017 at 01:26 PM Report #603394 Posted March 28, 2017 at 01:26 PM (edited) ola Citação e como tal penso que deve ser irrelevante mas não devia, já que estás a despender tempo. Citação O que queres dizer? quero dizer que por vezes é usado outro tipo de encoding e para que tudo fique com utf8 é necessário converter. http://php.net/manual/en/pdo.prepared-statements.php documentação oficial: $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); porque é que fazes ('$alemao', ? já tentaste adicionar slashes? $alemao = addslashes($alemao); // isto antes de inserires na bd claro para casos mais complexos, podes sempre converter para json: $alemao = json_encode($alemao); mas vai-te prejudicar nas pesquisas. cumps Edited March 28, 2017 at 01:27 PM by devgoncalo
13dev Posted March 29, 2017 at 06:15 PM Report #603411 Posted March 29, 2017 at 06:15 PM (edited) Olá, experimenta mudar a collation da tua base de dados para 'utf8_unicode_ci' Edited April 3, 2017 at 04:48 PM by 13dev
devgoncalo Posted April 3, 2017 at 09:07 AM Report #603478 Posted April 3, 2017 at 09:07 AM Em 29/03/2017 às 18:15, 13dev disse: Olá, experimenta mudar charset da tua base de dados para 'utf8_unicode_ci' ola já agora, o utf8_unicode_ci não é um charset, é uma collation. https://dev.mysql.com/doc/refman/5.7/en/charset-general.html cumps
13dev Posted April 3, 2017 at 09:16 AM Report #603479 Posted April 3, 2017 at 09:16 AM @devgoncalo Obrigado pelo o aviso ! vou já alterar
HappyHippyHippo Posted April 3, 2017 at 10:20 AM Report #603481 Posted April 3, 2017 at 10:20 AM 1 hour ago, 13dev said: @devgoncalo Obrigado pelo o aviso ! vou já alterar collation != collection IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
13dev Posted April 3, 2017 at 04:43 PM Report #603485 Posted April 3, 2017 at 04:43 PM (edited) 5 horas atrás, HappyHippyHippo disse: collation != collection Editado Edited April 3, 2017 at 04:47 PM by 13dev
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now