INSERT com WHERE no MySQL?

11 respostas
mysqlphp
T

Olá, preciso de ajuda com um código de inserção de dados em uma tabela.
Estou trabalhando com um sistema de livros online e preciso que ao cadastrar o capítulo desse livro, ele vá para livro com o título informado no form.

aqui está como fiz, mas está dando erro no where.

<?php 
    include ("partials/conexao.php");

    $nmhistoria = $_POST['nome'];
    $autora = $_POST['autora'];
    $nomecap = $_POST['nm_capitulo'];
    $conteudo = $_POST['conteudo'];
    $nota = $_POST['nota'];



    $sql_cadastrar = mysql_query("INSERT INTO tb_capitulo (nm_historia, nm_autora, nm_cap, ds_cap, nota) VALUES ('$nmhistoria', '$autora', '$nomecap', '$conteudo', '$nota')") where nm_historia = '$nmhistoria' or die("Erro no query ".mysql_error());
?>

Sou iniciante no MySQL e estou fazendo esse site para treinar um pouco, mas tive essa dificuldade.
Alguém pode me ajudar?

11 Respostas

L

Posso te dizer que jamais vi um insert com where…
Até por quê, a ideia do insert é inserir um novo registro, ou seja, colocar uma nova linha de valores na tabela, diferente de todas as que já existem.
Por isso existem as PKs. Caso você já tenha inserido algum registro com os mesmos dados que está tentando inserir (ao menos a primary key), o ideal é realizar um update.

Dragoon

Existe sim INSERT com WHERE. não generalize tanto, talvez ele esteja fazendo errado, mas, existe a possibilidade de utilizar where em um determinado insert.

T

eu vi alguns exemplos de insert com where em que precisa do select, mas nao consegui fazer, por isso pedi ajuda.

Dragoon

Existe sim, mas, você realmente está fazendo errado e ainda não entendi o seu proposito.

O que deseja fazer, é passar valores de uma tabela para outra?

L

@Dragoon, apenas coloquei a respeito da minha experiência… Nada além disso.
Que existe, eu sei, apenas nunca vi (igual caviar…)

Dragoon

“Posso te dizer que jamais vi um insert com where”, quem sabe você possa mudar esse texto, já visto que a informação não confere. Você nunca ver e existir tem muita diferença! Fico no aguardo da correção para que eu possa remover esse post e o anterior!

Dragoon

Consegui resolver?

L

$sql_cadastrar = mysql_query("INSERT INTO tb_capitulo (nm_historia, nm_autora, nm_cap, ds_cap, nota) VALUES ('$nmhistoria', '$autora', '$nomecap', '$conteudo', '$nota')") where nm_historia = '$nmhistoria' or die("Erro no query ".mysql_error());

Observe atentamente o trecho acima.
Se este trecho corresponde ao que você tem em teu código, o erro está no fato de você ter fechado as aspas duplas antes do que deveria. Note que você abre as aspas duplas logo após o parêntese esquerdo da função mysql_query, mas o fecha num parêntese solto, antes da palavra where.
Além disso, esse parêntese solto acaba por fechar a chamada à função mysql_query e bagunça tudo.

Abaixo o trecho corrigido.

$sql_cadastrar = mysql_query("INSERT INTO tb_capitulo (nm_historia, nm_autora, nm_cap, ds_cap, nota) VALUES ('$nmhistoria', '$autora', '$nomecap', '$conteudo', '$nota') where nm_historia = '$nmhistoria'") or die("Erro no query ".mysql_error());

T

Olá, consegui resolver com um código no php criando uma variável que puxa o código e compara

<?php
    $cd_historia = $_GET['cd_historia'];
    $result_historia= "SELECT * FROM vw_historiasing WHERE Codigo='$cd_historia'";
    $resultado_historia = mysql_query($result_historia);
    if (false === $resultado_historia) {
      echo mysql_error();
       }
    $rows_historia = mysql_fetch_assoc($resultado_historia);
    ?>

Funcionou, mas ainda estou desenvolvendo a lógica.
Agradeço a ajuda de todos

L

Resolveu?
Você alterou totalmente o que estava fazendo…
Enfim, se era o que esperava, está ótimo então.

T

Sim, fiz e refiz até chegar a outra solução, mas procurando pelos outros fóruns e outras pessoas com a mesma dúvida vi que tem sim como fazer insert com Where, mas é bem diferente de como eu estava tentando haha
de qualquer jeito, consegui resolver o problema. Obrigada a todos!

Criado 28 de março de 2017
Ultima resposta 28 de mar. de 2017
Respostas 11
Participantes 3