Ir ao conteúdo

Posts recomendados

Postado

Olá amigos do fórum, estou penando aqui para inserir dados em uma tabela que tem 2 campos,
 

create table email(id int primary key auto_increment, email varchar(45));

Estou usando o seguinte codigo:

<?php
  $nome = $_POST['nom'];
  
try
{
    // instancia objeto PDO, conectando no mysql
    $conn = new PDO("mysql:host=127.0.0.1;port=3306;dbname=bd2016", 'root', '');
 }
catch (PDOException $e)
{
    // caso ocorra uma exceção, exibe na tela
    print "Erro!: " . $e->getMessage() . "\n";
    var_dump($e);
    die();
}

    // executa uma série de instruções SQL
    $insere = $conn->prepare("INSERT INTO email(id, email)VALUES(PDO::lastInsetId();, '$nome')");
    $insere->execute();
    
    // fecha a conexão
    $conn = null;
?>


Meu problema é que quero inserir sem especificar o ID, mas como não conheço o PDO direito, não sei bem como fazer, poderiam me dar uma luz?

Ou então poderia ser especificando o ID, mas qual a melhor maneira de pegar os IDs (livres/ultimo ID), na primeira conexão com o banco de dados?

  • Moderador
Postado

@CiroboyBR

Não costumo trabalhar com pdo, mas, posso ajudar de alguma forma!

Antes, que perguntar,  Notei que na sua tabela só tem o campo ID e e-mail,  mas não tem para o nome. No seu php tu recebe só nome vindo do formulário e o e-mail? 

 

No aguardo

 

 

 

 

Postado

@dif É que eu estava com preguiça de editar o formulário HTML que enviava o POST pro arquivo PHP, mas essa parte do formulário e as variáveis esta tudo OK. Inclusive eu consigo inserir quando faço:

$insere = $conn->prepare("INSERT INTO email2(id, email)VALUES(1, '$nome')");

O problema mesmo é inserir no MYSQL utilizando PDO e sem especificar o ID (pode ser especificando o ID, mas de maneira fácil), pois fica chato ficar controlando o ID das inserções pelo PHP.

Porque eu até posso controlar o ID, mas tenho que criar um arquivo e salvar o ultimo ID inserido, mas não queria fazer isso, penso que haja uma maneira mais simples de resolver esse problema.

  • Moderador
Postado

@CiroboyBR No mysql tu não precisas especificar o ID, se omitir da inserção, ele insere automaticamente, porque o campo id já é auto increment.

 

tente fazer dessa maneira:

 

 $nome  = $_POST['nome'];
  $email = $_POST['email'];

// executa uma série de instruções SQL
    $sql = "INSERT INTO email(nome, email)VALUES(:nome, :email)";

    $insere = $conn->prepare($sql);

    $insere->bindParam(':nome', $nome, PDO::PARAM_STR); 
    $insere->bindParam(':email', $email, PDO::PARAM_STR);

    $insere->execute();
    $ultimoID = $insere->lastInsertId();

Mas para que isso funcione, sua tabela no banco de dados precisa ter 3 campos.

ID auto increment primary key

nome

email

 

No seu formulário acrescente o campo text para email. 

Tentar inserir no banco de dados um valor onde não existe espaço para ele vai dar erro sempre.

 

Fontes:

http://www.mustbebuilt.co.uk/php/insert-update-and-delete-with-pdo/

http://php.net/manual/pt_BR/pdo.lastinsertid.php

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

Postado

valeu @dif deu tudo certo.

Pra quem esta tendo dificuldades em inserir com PDO, vou deixar meu exemplo prático e simples:

 

Comando pra criar a tabela no MYSQL:

create table mensagem(id int primary key auto_increment, nome varchar(80), msg varchar(200));



Arquivo HTML: index.html

<html>
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 </head>
  <body>
    <form method="POST" action="envia.php">
      Nome: <input type="text" size="10" name="nome"><BR>
   <BR>
	    Mensagem: <input type="text" size="100" name="msg"><BR>
      <input type="submit" value="enviar">
    </form>
  </body>
</html>

Arquivo PHP: envia.php

<?php
   $nome  = $_POST['nome'];
   $msg = $_POST['msg'];
  
try
{
    // instancia objeto PDO, conectando no mysql
    $conn = new PDO("mysql:host=127.0.0.1;port=3306;dbname=bd2016", 'root', '');
 }
catch (PDOException $e)
{
    // caso ocorra uma exceção, exibe na tela
    print "Erro!: " . $e->getMessage() . "\n";
    var_dump($e);
    die();
}

    $insere = $conn->prepare("INSERT INTO mensagem(nome, msg)VALUES(:nome, :msg)");

    $insere->bindParam(':nome', $nome, PDO::PARAM_STR); 
    $insere->bindParam(':msg', $msg, PDO::PARAM_STR);

    $insere->execute();
    
    // fecha a conexão
    $conn = null;
?>

EDIT:
 

@dif Parece que eu tava fazendo alguma caca, modifiquei o arquivo PHP e rodou assim:
 

envia.php

<?php
   $nome  = $_POST['nome'];
   $msg = $_POST['msg'];
  
try
{
    // instancia objeto PDO, conectando no mysql
    $conn = new PDO("mysql:host=127.0.0.1;port=3306;dbname=bd2016", 'root', '');
    
    $insere = $conn->prepare("INSERT INTO mensagem(nome, msg)VALUES($nome, $msg)");
    $insere->execute();
    
    // fecha a conexão
    $conn = null;
 }
catch (PDOException $e)
{
    // caso ocorra uma exceção, exibe na tela
    print "Erro!: " . $e->getMessage() . "\n";
    var_dump($e);
    die();
}  
?>


Isso que dá esquentar a cabeça =/

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!