Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giihh

Múltiplos inserts inner join PDO

Recommended Posts

Olá,

 

Tenho no DB as tabelas categoria e imagens

 

Diversas imagens podem ser relacionadas a um id da tabela categoria.

 

Atualmente a function para somente inserir na tabela categoria esta similar a isto:


	public function insere($ttitulo)
	{
		
  
	try
		{
			$stmt = $this->db->prepare("INSERT INTO categoria (titulo) VALUES(:titulo)");
			$stmt->bindparam(":titulo",$ttitulo);					
			$stmt->execute();
			return true;
			
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();	
			return false;
		}
		
	}

Tenho um form com titulo e possibilidade de inserção de até 5 imagens.

 

O titulo quero que vá para a tabela categoria, até aqui ok, as imagens devem ir para a tabela imagens, um id para cada imagem mas com inner join para o id da categoria.

 

Na tabela imagens entendo que as colunas ficam assim:

id_imagem | categoria_ID | dir_imagem

dir imagem só vai pegar o caminho.

 

A duvida é como relacionar e como em um unico submit inserir os ids na tabela imagens conforme a quantidade de imagens no formulario

 

Agradeço ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei como faço na function para inserir e selecionar o id imediatamente criado e salvar

 

            $stmt = $this->db->prepare("INSERT INTO categoria (titulo) VALUES(:titulo)");

            $stmt = $this->db->prepare("SELECT id_imagens FROM imagens WHERE id_categoria = id_imagens ");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em resumo, use a função do PDO lastInsertId() para pegar o ID da ultimo registro inserido, então faça a logica para o INSERT na tabela imagens.

 

 

public function insere($ttitulo,$imagens)
{
try {
        $stmt = $this->db->prepare("INSERT INTO categoria (titulo) VALUES(:titulo)");
        $stmt->bindparam(":titulo",$ttitulo);                    
        $stmt->execute();
 
        $ultimoId = $db->lastInsertId();
 
        $sql = "INSERT INTO imagens (categoria_ID, dir_imagem) VALUES ";
        $qtImagens = count($imagens);
        for ($i = 0; $i < $qtImagens; $i++){
 
         //LOGICA PARA GRAVAÇÃO DAS IMAGENS NO DISCO.
 
         $sql = $sql . "($ultimoId, 'DIRETORIO')";
        }
 
        $stmt = $this->db->prepare($sql);
        $stmt->execute()
 
 
        return true;
    }
    catch(PDOException $e) {
        echo $e->getMessage();    
        return false;
    }
        
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada insert/update/delete é específico para uma tabela. Conforme já explicado, insira em uma e, após, na outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.