Jump to content
Fórum Script Brasil
  • 0

PDO insere valores nulos no mysql


fabio_siqueira
 Share

Question

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();}
  

?>

 

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

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();
}

 

Link to comment
Share on other sites

  • 0

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?

Link to comment
Share on other sites

  • 0

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

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...