fabio_siqueira Postado Abril 28, 2016 Denunciar Share Postado Abril 28, 2016 Galera bom dia! alguém consegue me ajudar? Estou tentando importar um arquivo csv para o banco mysql usando PDO. acontece que ele insere todos os valores como NULL na tabela. Segue meu código: <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "fabio"; $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); $filename = ($_FILES['arquivocsv2']["tmp_name"]); $abraArq = fopen($filename,"r"); $import = $conn->prepare("INSERT INTO relatorio (DocumentoSD,Descricao,CodCliente,Cliente,Regiao,DataDocumento,Material,Condicoes,Plano)VALUES (:DocumentoSD, :Descricao, :CodCliente, :Cliente, :Regiao, :DataDocumento, :Material, :Condicoes, :Plano)"); $import->bindValue(':DocumentoSD', $DocumentoSD,PDO::PARAM_STR); $import->bindValue(':Descricao', $Descricao,PDO::PARAM_STR); $import->bindValue(':CodCliente', $CodCliente,PDO::PARAM_STR); $import->bindValue(':Cliente', $Cliente,PDO::PARAM_STR); $import->bindValue(':Regiao', $Regiao,PDO::PARAM_STR); $import->bindValue(':DataDocumento', $DataDocumento,PDO::PARAM_STR); $import->bindValue(':Material', $Material,PDO::PARAM_STR); $import->bindValue(':Condicoes', $Condicoes,PDO::PARAM_STR); $import->bindValue(':Plano', $Plano,PDO::PARAM_STR); while (($items = fgetcsv($abraArq, 2048, ';')) !== FALSE) { $DocumentoSD = $items[]; $Descricao = $items[4]; $CodCliente = $items[5]; $Cliente = $items[6]; $Regiao = $items[7]; $DataDocumento = $items[10]; $Material = $items[11]; $Condicoes = $items[17]; $Plano = $items[29]; // Execute prepared query $import->execute();} ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stoma Postado Abril 28, 2016 Denunciar Share Postado Abril 28, 2016 Boa tarde. Acredito que todas as suas chamadas ao ->bindValue devem estar dentro do while, já que a variável $DocumentoSD, etc, são criadas lá. Algo assim: while (($items = fgetcsv($abraArq, 2048, ';')) !== FALSE) { $DocumentoSD = $items[]; $Descricao = $items[4]; $CodCliente = $items[5]; // adicionar o restante das atribuções $import->bindValue(':DocumentoSD', $DocumentoSD,PDO::PARAM_STR); $import->bindValue(':Descricao', $Descricao,PDO::PARAM_STR); $import->bindValue(':CodCliente', $CodCliente,PDO::PARAM_STR); // adicionar o restante dos bindValue $import->execute(); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabio_siqueira Postado Abril 28, 2016 Autor Denunciar Share Postado Abril 28, 2016 Fiz isso...e agora ele apresenta o erro: Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE9dito' for column 'Descricao' at row 1 in C:\wamp\www\consumo\pdo_teste_sozinho2.php:35 Stack trace: #0 C:\wamp\www\consumo\pdo_teste_sozinho2.php(35): PDOStatement->execute() #1 {main} thrown in C:\wamp\www\consumo\pdo_teste_sozinho2.php on line 35 Ele não está aceitando os caracteres especiais, mas a função do prepare não é exatamente essa de aceitar os acentos e etc? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stoma Postado Abril 28, 2016 Denunciar Share Postado Abril 28, 2016 Na verdade não. Com a função prepare, a consulta é executada em em duas etapas... uma que envia o comando (ou seja, prepara o comando para execução) e outra etapa que envia os valores a serem usados no comando (o bindValue e depois o execute). Essa é a função do prepare, apenas preparar uma consulta que será executada posteriormente, e ela não faz tratamento de valores. Acho que no seu caso, você teria que converter os valores para utf8 antes de salvar no banco. Tente assim: $DocumentoSD = utf8_encode($items[]); $Descricao = utf8_encode($items[4]); $CodCliente = utf8_encode($items[5]); // restante das atribuições Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabio_siqueira Postado Abril 28, 2016 Autor Denunciar Share Postado Abril 28, 2016 Funcionou!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Muito obrigado! tem como já deixar "padrão" para transformar tudo ou realmente tenho que fazer essa conversão? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stoma Postado Abril 28, 2016 Denunciar Share Postado Abril 28, 2016 Que bom que funcionou! :) Você vai ter que fazer a conversão manual mesmo... se for o caso, poderia criar um for na variável $items e converter tudo que tem nela, mas no final vai dar na mesma. Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabio_siqueira Postado Abril 28, 2016 Autor Denunciar Share Postado Abril 28, 2016 beleza..obrigado pela ajuda! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stoma Postado Abril 28, 2016 Denunciar Share Postado Abril 28, 2016 De nada! Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
fabio_siqueira
Galera bom dia!
alguém consegue me ajudar?
Estou tentando importar um arquivo csv para o banco mysql usando PDO.
acontece que ele insere todos os valores como NULL na tabela.
Segue meu código:
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.