Retrieve remaining data via array ID

Asked

Viewed 230 times

0

How do I get the data that was not passed via $_POST, but are already saved in the same table that I am receiving some data, such as ID,NOME_PRODUTO,etc., in an array, which receives data from various products.

 //POST em array que recebo

$valor_unitario = $_POST['valorunitario'];
$nome-produto= $_POST['nome_produto'];
$quant_produto = $_POST['quant_produto'];
$subtotal = $_POST['subtotal'];
$id_produto = $_POST['id_produto'];


//AQUI INSERE OS ARRAYS NO BANCO DE DADOS, RECEBE OS PRODUTOS ADICIONADOS VIA POST (AQUI QUERO SALVAR O RESTANTE DOS CAMPOS DO PRODUTO ATRAVÉS DO ID DELES.
$i=0;
$sql= "INSERT INTO `log_nfe_produtos` (`NOME_PRODUTO`, `VALOR_UNITARIO`, `QUANT_PRODUTO`, `SUBTOTAL`, `ID_EMPRESA`,`ID_NF`) VALUES ";

foreach($nome_produto as $p){

$sql=$sql."('$p','$valor_unitario[$i]','$quant_produto[$i]','$subtotal[$i]','1','$cod_pedido[$i]'),";

$i++;

}

$sqlFinal = substr($sql, 0, strlen($sql)-1);

$sqlFinal2 = $conn->prepare("$sqlFinal");

$sqlFinal2->execute();

1 answer

0

According to the Manual of PDO there is a feature called lastInsertId which aims to access the id of the last line or sequence value inserted.

You can do it like this:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

If you want to do it with SQL function instead of the PDO API, you would do it as a normal selection query:

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();

An example for your case would look like this:

$dados_persistidos = [];

foreach($nome_produto as $p){
    $sql = "INSERT INTO `log_nfe_produtos` (`NOME_PRODUTO`, `VALOR_UNITARIO`, `QUANT_PRODUTO`, `SUBTOTAL`, `ID_EMPRESA`,`ID_NF`) VALUES ";
    $sql .= "('$p','$valor_unitario[$i]','$quant_produto[$i]','$subtotal[$i]','1','$cod_pedido[$i]'),";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    /*
       Salva o último id inserido no banco no array 
       para posteriormente poder acessá-los
    */
    array_push($dados_persistidos, $db->lastInsertId());  
}

Then with the id's saved in array $dados_persistidos, a simple select can be done, so:

$id_s = implode(',', $dados_persistidos);
$sql = 'SELECT * FROM `log_nfe_produtos` WHERE id_log_nfe_produtos in ('.$id_s.')';
$consulta = $pdo->query($sql);
$resultados = $consulta->fetchAll(PDO::FETCH_ASSOC);
print_r($resultados);

I hope it helps you. And adjust the code to your need.

Note: I broke the sql script in two parts for the scroll bar not getting too big.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.