[RESOLVIDO]Código PHP salvando só o primeiro registro

Estou com um código php para salvar dados no MySQL, porém ele só salva a primeira linha no banco e para de executar, na hora que ele está executando ele fica aparecendo uns códigos: “array(13) { [0]=> string(0) “””

<?php session_start();
//Incluir a conexao com BD
include_once("conexao.php");

//Receber os dados do formulário
//$arquivo = $_FILES['arquivo'];
//var_dump($arquivo);
$arquivo_tmp = $_FILES['arquivo']['tmp_name'];

//ler todo o arquivo para um array
$dados = file($arquivo_tmp);
//var_dump($dados);

foreach ($dados as $linha) {
    $linha = trim($linha);
    $valor = explode('|', $linha);
    var_dump($valor);

    $REG = $valor[1];
    $COD_ITEM = $valor[2];
    $UNID = $valor[3];
    $QTD = $valor[4];
    $VL_UNIT = $valor[5];
    $VL_ITEM = $valor[6];
    $IND_PROP = $valor[7];
    $COD_PART = $valor[8];
    $TXT_COMPL = $valor[9];
    $COD_CTA = $valor[10];
    $VL_ITEM_IR = $valor[11];


    $del = "TRUNCATE TABLE h010";
    $create = "CREATE TABLE h010 (h010_id INT PRIMARY KEY AUTO_INCREMENT, REG VARCHAR(5), COD_ITEM INT(11), UNID VARCHAR(5), QTD INT(11), VL_UNIT DOUBLE, VL_ITEM DOUBLE, IND_PROP INT(11), COD_PART VARCHAR(225), TXT_COMPL VARCHAR(225), COD_CTA INT(11), VL_ITEM_IR VARCHAR(225))";
    $result = "INSERT INTO h010 (REG, COD_ITEM, UNID, QTD, VL_UNIT, VL_ITEM, IND_PROP, COD_PART, TXT_COMPL, COD_CTA, VL_ITEM_IR) VALUES ('$REG', '$COD_ITEM', '$UNID', '$QTD', '$VL_UNIT', '$VL_ITEM', '$IND_PROP', '$COD_PART', '$TXT_COMPL', '$COD_CTA', '$VL_ITEM_IR')";

    $resultado = mysqli_query($conn, $del);
    $resultado1 = mysqli_query($conn, $create);
    $resultado2 = mysqli_query($conn, $result);
}
$_SESSION['msg'] = "<div class='alert alert-success' role='alert'>Evento excluído com sucesso!<button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>&times;</span></button></div>";

Qual sentido de usar TRUNCATE e CREATE dentro do laço?

Sua lógica está equivocada nesse ponto, na verdade você não grava o primeiro registro, mas o ultimo, pois cada vez que precisa inserir ele vai limpar a tabela, criá-la para depois inserir, ou seja, os registros anteriores você já perdeu…

Aliás, qual sentido de criar uma tabela após ter “truncado” ela? Se você truncou é porque a tabela já existe certo?

Você poderia tentar dessa forma:

$create = "CREATE TABLE IF NOT EXISTS h010 (h010_id INT PRIMARY KEY AUTO_INCREMENT, REG VARCHAR(5), COD_ITEM INT(11), UNID VARCHAR(5), QTD INT(11), VL_UNIT DOUBLE, VL_ITEM DOUBLE, IND_PROP INT(11), COD_PART VARCHAR(225), TXT_COMPL VARCHAR(225), COD_CTA INT(11), VL_ITEM_IR VARCHAR(225))";
$resultado = mysqli_query($conn, $create);
$resultado1 = mysqli_query($conn, "TRUNCATE TABLE h010");

foreach ($dados as $linha) {
    ...
    $resultado2 = mysqli_query($conn, $result);
}

https://dev.mysql.com/doc/refman/5.5/en/replication-features-create-if-not-exists.html

1 curtida

Eu estava buscando uma maneira de apagar todos os dados da tabela(o que são muitos) e depois inserir os novos dados.

Usar o truncate é válido, mas no lugar certo e não dentro do foreach pegou?