Ir para conteúdo

Arquivado

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

  • 0
srmacedo

Insert "orientado"

Pergunta

Até então eu usava um comando para cada insert que eu fosse fazer no meu banco de dados. Visto que isso ocupa muito tempo, fiz esse simples algoritmo para auxiliar e deixar de forma automática.

 

function inserir($pCampos, $pTabela, $pValue) {
        $pCampos2 = array();
        
        for ($x = 0; $x < count($pCampos); $x++) {
            array_push($pCampos2, ":".$pCampos[$x]);
        }
        
        $sqlQuery = "INSERT INTO ".$pTabela." (".implode(", ", $pCampos).") values "
                . "(".implode(", ", $pCampos2).")";
        
        $this->setPdo($this->con->getConexao()->prepare($sqlQuery));
        
        for ($x = 0; $x < count($pCampos); $x++) {
        $this->getPdo()->bindValue($pCampos2[$x], $pValue[$pCampos[$x]]);
        }
        
        $this->getPdo()->execute();
    }

 

Gostaria de saber se existe uma forma melhor de se fazer isso, ou se está bom da forma que está.

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

4 respostas a esta questão

Recommended Posts

Cheguei neste post através deste!
 

Seu código tem sérios problemas de design, dentre ele estes for()
 

for ($x = 0; $x < count($pCampos); $x++) {
            array_push($pCampos2, ":".$pCampos[$x]);
        }
for ($x = 0; $x < count($pCampos); $x++) {
        $this->getPdo()->bindValue($pCampos2[$x], $pValue[$pCampos[$x]]);
        }

 

 

e parâmetros invertidos

( $pCampos, $pTabela, $pValue )


E claro a falta de Doc.
 

Pra resolver o problema do for, use a função array_map repare que ele é uma função de callback.


Exemplo
 

$map = array_map(function($i){
    return ':'. $i;
}, $pCampos);

print_r($map);

só criar uma função separada para usar em outros lugares.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Williams Duarte, obrigado pelo seu comentário e por sua dica com array_map.

Qual seria um padrão recomendado para uma situação dessa forma?

Perdão pela falta de doc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise por Domain Service ou Application Service em modelagem DDD.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

:smile: ia me esquecendo hehehe

Ou também e de forma mais simplista o CRUD

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • Por unset
      Olá, estou com uma falha de lógica pegando aqui se alguém puder ajudar
       
      Eu tenho um formulário tranquilo, como abaixo
      <label for="cidades" class="form-label">Cidades</label> <select class="form-select mb-3" name="cidades[]" id="cidades" multiple="multiple"> <option value="1">Cidade 1</option> <option value="2">Cidade 2</option> <option value="3">Cidade 3</option> <option value="4">Cidade 4</option> <option value="5">Cidade 5</option> </select>  
      Blz eu recebe os dados do formulário ou seja os ids da cidade certinho em um array 
       
      array(3) { [0]=> string(1) "2" [1]=> string(2) "3" [1]=> string(1) "5" }
      <?php $dados = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRIPPED); var_dump($dados); ?> Agora como inserir todos os ids no banco? utilizando um for? um while? algum exemplo?
       
      Pergunto pq ao tentar inserir no banco somente um registro é inserido e não todos do select
       
    • Por leandrodesouza14
      Tenho uma duvida.
       
      Estou recebendo dados de um formulário HTML através do método POST. Um desses dados provem de um campo Select com diversos Options.
       
      Eu vou inserir os dados recebidos dos diversos imputs em varias tabelas, qual das tabelas vai depender do que o usuário selecionar no Select.
       
      Por exemplo: Se a pessoa selecionar BMW no Select, os dados do restante do formulário devem ser inseridos na tabela BMW. / Se a pessoa selecionar Fiat no Select, os dados do restante do formulário devem ser inseridos na tabela Fiat.
       
      O codigo que desenvolvi ate agora foi esse:
       
      <form action="cadastrodeveiculo.php" method="post" name="cadastroveiculo"> <p> Fabricante: <select name="marca"> <option value="audi" >Audi</option> <option value="bmw">BMW</option> <option value="chevrolet">Chevrolet</option> <option value="citroen">Citroen</option> <option value="fiat">Fiat</option> <option value="ford">Ford</option> <option value="hyundai">Hyundai</option> <option value="honda">Honda</option> <option value="jeep">Jeep</option> <option value="mb">Mercedes-Benz</option> <option value="mitsubishi">Mitsubishi</option> <option value="nissan">Nissan</option> <option value="peugeot">Peugeot</option> <option value="renault">Renault</option> <option value="toyota">Toyota</option> <option value="volkswagen">Volkswagem</option> </select> Modelo: <input type="text" id="modelo" name="modelo" maxlength="50"> Versao: <input type="text" id="versao" name="versao" maxlength="100"> Ano: <input type="text" id="ano" name="ano" maxlength="12"> Link: <input type="text" id="link" name="link" maxlength="300"> </p> <input class="submit" type="submit" name="cadastrar" value="Cadastrar"> </form> O codigo PHP, da pagina cadastroveiculo.php e o seguinte:
       
      <?php $conn = mysqli_connect("localhost", "leandro", "123", "afxveiculos"); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; $tabela = $_POST['marca']; $modelo = $_POST['modelo']; $versao = $_POST['versao']; $ano = $_POST['ano']; $link = $_POST['link']; $sql = "INSERT INTO (modelo, versao, ano, link) VALUES ('$modelo', '$versao', '$ano', '$link')"; if (mysqli_query($conn, $sql)) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); header("location: cadastroesquema.html"); ?> Deixei o Insert Into vazio pois não sei que colocar la.
       
      Obrigado galera!
    • Por Koromon
      Olá galera,
      Criei um arquivo .bat para rodar comandos do MySQL automaticamente, com o agendador de tarefas do computador.
      Nesse arquivo .bat tem dois tipos de comandos:
      1. Inserir dados .txt em uma primeira tabela (I) no MySQL;
      2. Inserir os dados da primeira tabela (I) em outra (II) (para criar tipo um histórico de dados);
      O problema é que esse .bat só faz um dos comandos (inserir dados .txt na primeira tabela) o outro ele ignora.
      Se eu fizer manualmente pelo MySQL Workbench, roda tudo tranquilo. Alguém imagina o que pode estar acontecendo?

      Antigamente, eu tive esse mesmo problema em outro projeto, mas o motivo é que eu não colocava ponto e virgula (;) no comando problemático. Nisso, manual rodava, automático não.
      Mas aconteceu novamente (agora com o insert into), mas dessa vez eu coloquei o (;) e mesmo assim não resolveu.

      Código utilizado:
      insert into tabela1 (coluna1, coluna2, coluna3) 
      select coluna11, coluna22, coluna33 from tabela2;
×

Informação importante

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