Jump to content
gramosiri2

Variável em uma query

Recommended Posts

Oi estou tentando passar um valor através de uma variável em uma query, porém não está mostrando o resultado que eu quero.

 

Aqui eu pego o ultimo id do pedido

<?php
while($row = $consulta_pedido2->fetch_assoc()){
	echo $row['id_pedido'];
}?>

E aqui eu faço a query e passo variável...

$query ="SELECT 
	itempedido.id_itempedido,
	itempedido.valor,
...
FROM itempedido
	INNER JOIN produto ON 
...
     WHERE
	itempedido.pedido_id = '$row'";

No caso onde está a variável $row, se eu colocar o numero do pedido manualmente, me retorno os itens daquele pedido, agora com a variável não está mostrando, alguma ideia?

Share this post


Link to post
Share on other sites

@gramosiri2

 

Experimente usar o código como abaixo:

 

$query ="SELECT 
	itempedido.id_itempedido,
	itempedido.valor,
...
FROM itempedido
	INNER JOIN produto ON 
...
     WHERE
	itempedido.pedido_id = ".$row['id_pedido'];

itempedido.pedido_id = ".$row['id_pedido'];

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

Tentei tambem colocar dentro da aspas simples e retornou outro erro

itempedido.pedido_id = '.$row ['id_pedido'] .'";

 

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\teste\db.php on line 84

Share this post


Link to post
Share on other sites

@gramosiri2

 

O erro está no tipo da variável, no seu Banco de Dados "QUAL É O TIPO DA SUA COLUNA ITEMPEDIDO.PEDIDO_ID?"

 

É CHAR, VARCHAR, INT, FLOAT, DOUBLE?

 

Para te explicar como funciona, se for do TIPO STRING (CHAR ou VARCHAR) declarado no Banco de Dados, então ela deve estar entre aspas sim, mas a sintaxe fica assim.

 

$query ="SELECT 
	itempedido.id_itempedido,
	itempedido.valor,
...
FROM itempedido
	INNER JOIN produto ON 
...
     WHERE
	itempedido.pedido_id = '".$row['id_pedido']."'";

Eu te explico o porque, você ABRIU o conteudo que você vai colocar dentro da variável $QUERY com ASPAS DUPLAS, então TUDO o que estiver dentro de ASPAS DUPLAS é o conteudo da variável $QUERY, quando você quer CONCATENAR com uma variável PHP exeplo $row['id_pedido'], você deve FECHAR as ASPAS DUPLAS e colocar um " . " (PONTO) para dizer que depois do conteudo que está entre ASPAS DUPLAS você está concatenando com uma VARIÁVEL PHP, por isso eu coloquei no primeiro exemplo ".$row ['id_pedido']

 

Isso se a sua COLUNA ID_PEDIDO no Banco de Dados for uma variável NUMÉRICA.

 

AGORA se a sua variável no banco de dados for uma variável do tipo ALPHANUMÉRICA, então devemos colocar dentro da STRING da $QUERY o conteudo entre ASPAS SIMPLES para que o Banco de Dados possa identificar no EXEC SELECT o que é ALPHANUMÉRICO ou NUMÉRICO.

 

Então neste caso fica como o exemplo que lhe passei acima.

 

Abrimos o que vamos colocar dentro da variável $QUERY com ASPAS DUPLAS e ainda dentro das ASPAS DUPLAS colocamos a nossa ASPAS SIMPLES para dizer que o conteudo que vem depois do = é um ALPHANUMÉRICO, então fechamos as ASPAS DUPLAS, concatenamos com a variável PHP com o PONTO e em seguida precisamos concatenar a STRING com a ASPAS SIMPLES para fechar o conteudo da VARIÁVEL, então a diferença é essa.

 

COLUNA ID_PEDIDO = ALPHANUMÉRICO COMANDO.

pedido_id = ".$row['id_pedido'];

 

COLUNA ID_PEDIDO = NUMÉRICA COMANDO.

pedido_id = '".$row['id_pedido']."'";

 

Bom, é isso, só um detalhe que observei, você tem

 

pedido_id e id_pedido na sua tabela?

Esta correto mesmo?

 

Reveja a sua BASE DE DADOS e tente executar o comando diretamente dentro do Banco de Dados e veja qual erro lhe retorna.

 

Se você estiver com dificuldades, poste aqui a estrutura da sua tabela, tipo esta que segue em anexo.

 

image.png.c22183eb868b413669194f0b2beeec12.png

 

Assim podemos montar com precisão o seu comando.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

@Felipe Guedes Coutinho cara, deu certo do jeito que você mencionou.

Agora sobre sua pergunta, a coluna pedido_id é da tabela itempedido e a coluna id_pedido é da tabela pedido. Isso é para mostrar o último pedido e os itens de pedido selecionados pelo usuário.

 

Obrigado.

Share this post


Link to post
Share on other sites

@gramosiri2

 

Sucesso então.

 

Tranquilo, perguntei porque achei estranho, talvez você deva estudar um pouco sobre "modelo de dados", pois nomenclatura para Banco de Dados é de grande importância, como você que está construindo fica um pouco tranquilo enquanto está desenvolvendo, mas se você deixar de mexer por um periodo, você pode ter que rever o conceito para relembrar as regras, os campos das colunas devem ser intuidivos, tanto para você quanto para qualquer um que não seja você a dar manutenção no sistema.

 

Só uma dica, mas que bom que funcionou.

 

Não esquece de dar um +REP, valeu.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

@Felipe Guedes Coutinho deu certo, porém se eu tentar inserir algum item ele não insere no banco...

Estou achando que é no while, pois quando tiro ele, insere os elementos no banco normalmente

 

while($row = $consulta_pedido2->fetch_assoc()){
	echo $row['id_pedido']."<br>";

$query ="SELECT 
	itempedido.id_itempedido,
	itempedido.valor,
	itempedido.quantidade,
	itempedido.pedido_id,
	cliente.nome,
	produto.marca,
	produto.unidade,
	produto.preco,
	pedido.observacoes,
    pedido.data_pedido,
    produto.nome
FROM itempedido
	INNER JOIN produto ON 
	 itempedido.produto_id = produto.id_produto
	 INNER JOIN pedido ON 
	 itempedido.pedido_id = pedido.id_pedido
     INNER JOIN cliente ON
     cliente.id_cliente = pedido.cliente_id
     WHERE
	itempedido.pedido_id = '".$row['id_pedido']."'";
}
$consulta_item_pedido = mysqli_query($conexao, $query);

 

Share this post


Link to post
Share on other sites

@gramosiri2

 

Poste o código completo, pois acho que existe um erro na sua lógica.

 

Um comando não interfere no outro a não ser que você utilize a mesma variável de armazenamento da QUERY para executar, então, para que possa ser feito uma melhor análise, poste o código completo para que seja possível entender o que a sua página faz e achar o erro.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By granderodeo
      Estou tentando pegar dados de duas tabelas logo no inicio da sessão quando o usuário realiza o login, quando utilizo o 
      SELECT * FROM usuarios, orders WHERE email = '$login' and senha= '$senha' Consigo realizar o login tranquilamente, até ai de boa, mais quando modifico o código para
       
      $comando="SELECT * FROM usuarios INNER JOIN orders ON usuarios.id_usuario = orders.id_usuario WHERE email.usuarios='$login' and senha.usuarios='$senha'"; Ele só me deixa fazer login se o usuário já tiver algum orders (pedido). O que estou tentando fazer é assim que o usuário loga, mostre também os pedidos que ele já fez etc, que são dados que estão em outra tabela. Alguém consegue ver meu erro?
    • By Fernando Rafael
      Estou tendo problemas com a leitura de porta serial com PHP, consigo facilmente escrever na mesma, mas sempre que no comando de abertura da porta eu coloco que haverá permissão de leitura o PHP trava e fica carregando infinitamente, e a porta fica bloqueada e só libera quando reiniciado o computador.
       
      Segue o cod:
      exec('MODE COM1:9600,n,8,1'); //seta configuração na porta COM $fp=fopen("COM1","r+b"); if(!$fp) {     echo("Erro ao abrir a porta com1");     exit; } else {         echo("COM1 aberta <br>"); } fwrite($fp,Chr(5));  //escrevendo valor na porta sleep(1); //pausa para retorno dos dados echo (fgets($fp)); fclose($fp); já tentei  colocar:
      fopen("COM1", "r+b");
      fopen("COM1", "r+t");
      fopen("COM1", "r");
      fopen("COM1", "w+");
      fopen("COM1", "r+");
       
      para escrever consigo normal, com o fopen("COM1", "w");.  mas já para ler.....
       
      Notei que na internet tem muito sobre esse problema, inclusive falaram em permissões de usuário, sendo que nos casos em que conseguiram, estavam usando o Linux.
      Eu estou usando o W7 e W10 com PHP 5.2, se for o caso de permissões, como resolvo isso? preciso configurar mais alguma coisa no php.ini?
       
      Também já tentei usar uma classe: phpSerial
       
      Mas retorna o seguinte erro:
      Warning: Reading serial port is not implemented for Windows in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\balanca\php_serial.class.php on line 503
       
       
    • By rogerblower
      Pessoal tenho a seguinte tabela
      id | id_etapa | id_evento | posicao | nome | pontos
      1  |  1             |        2         |   1           | joao      |  10
      2  |  1             |        2         |   2           | pedro    |  9
      3  |  1             |        2         |   3           | maria    |  8
      4  |  1             |       2          |   4           | jose       |  7
      5  |  2             |      2          |   3           | joao       |  8
      6  |  2             |  2              |   1           | pedro    | 10
      7  |  2             |   2             |  2            | maria    |  9
      8  |  2             |  2              |   4          | jose        |  7
       
      O resultado da consulta pretendido é este
      Pos  |  nome |   pontos
      1      |  pedro   | 19
      2      |   joao   | 18
      3      |  maria  |  17
      4      |  jose  |  14
       
      Com esta consulta não ordenando a coluna posicao como esperado, ela repete a posicao e não faz a soma, ex:
       1     joao     10
       1     pedro     10
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome, posicao ORDER BY pontos DESC posicao ASC"); Com esta outra consulta a soma esta correta o agrupamento nome esta correto, não se repetem, mas a coluna posicao fica fora de ordem;
       
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome ORDER BY pontos DESC posicao ASC"); Não estou conseguindo acertar a consulta, alguém me ajuda?
    • By rjlfurtado
      Segue abaixo o exemplo de como seria feito em SQL:
      CREATE TABLE tabela ( campo1 DOUBLE, campo2 DOUBLE, divisao DOUBLE AS (campo1/campo2) ); Agora eu preciso criar uma migração no Laravel 6, segue exemplo abaixo:
      $table->integer('qtd_saida'); $table->decimal('valor_uni', 8, 2); $table->double('valor_total')->as(qtd_saida * valor_uni);  
    • By Marxrj
      Olá a todos!,
      Queria aqui uma dica se alguém sabe como alinhar fotos no centro pelo bootstrap.
      Usando o padrão fotos retratos fica como abaixo
      __________  __________
      __________
       
      Mas eu queria que quando tivesse um número impar, a foto não ficasse alinhada na esquerda e sim centralizada como abaixo
      __________  __________
                __________
       
      Estou usando este padrão abaixo aonde ele alinha duas fotos ao lado, mas quando tem somente um ou em número impar, essa não centraliza e sim fica a esquerda.
      <div class="col-xs-12 col-sm-10 col-lg-6 col-md-3">
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.