How to insert data using query in a for loop?

Asked

Viewed 241 times

1

I’m trying to insert data into the mysql DB being that some data repeats and others not so who would command the number of executions would be the for, but it is not running the query inside for. I have already done some testing of echo and the variables are ok.

 $control=mysqli_query($conn,"select ifnull(max(id_controle),0)from ficha");
 $controll=mysqli_fetch_row($control);

 $ct=$controll[0];
 $ct++;

$quantidade = count($quant);

$qu.="insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)";
for ($q = 0; $q < $quantidade; $q++){

$quant[$q];
$descricao[$q];
$cor[$q];
$valorm[$q];
$idcliente;
$ct;
$pedido;
$idcliente;
$acrecimo;
$entrega;
$montagem;
$tsmg;
$qu.="values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')";
$p=mysqli_query($conn,$qu);

} }

Someone can help out?

1 answer

1


The problem is in string concatenation.

The $qu variable is being used to concatenate your sql command. What happens is the following:

Value of $qu before loop:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,****id-   produto****,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)

Notice what is between ****, you may have an error in the sql command, check the column name.

$qu value after first loop iteration:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,****id-   produto****,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

Notice that VALUES is pasted with ), you will probably get error in the first iteration even.

In the second loop iteration you will be joining the value of $qu with values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg'), resulting in:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

The word VALUES is repeating what is incorrect in sql syntax, the correct should be:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs) values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg'), ('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

And it happens more and more every time the loop turns.

Instead of:

    $qu.="values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')";

   $p=mysqli_query($conn,$qu);

Try:

$p=mysqli_query($conn,$qu . " values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')");

This way you do not assign the concatenation in $qu, note that I also put a space before values

Browser other questions tagged

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