Ir para conteúdo

POWERED BY:

Arquivado

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

Brayan Rastelli

Insert com PDO

Recommended Posts

Seguinte.. to aprendendo a usar o PDO.. e fiz umas funçoes pra editar, inserir, excluir..

 

só q a inserir ta duplicandoo.. ou seja, insere duas vezes a query..

 

quando eu passo um valor no ID ela coloca uma só.. por ser unique.. mas se deixo vazio(auto increment), ela insere duas vezes no BD

 

<?
   class produto{
      //outros metodos
      function insert($cod,$nome,$unidade,$grupo,$custo)
        {
            addslashes($nome,$unidade,$grupo,$custo);
            $sql = "INSERT INTO produtos (CODPROD,PRODUTO,UNIDADE,GRUPO,CUSTO,CUSTOMED)                           values('$cod','$nome','$unidade','$grupo','$custo','$custo') ";
            $conn = new PDO('mysql:host=localhost;dbname=estoque', 'root','');
            $conn->query($sql);
            unset($conn);
        }
   }
   $produto = new Produto;
   $produto->insert(1, 'Testee','KG',10,'26.80');
?>

no cód. acima ele insere normalmente.. mas a intençao era fazer assim.. mas ta duplicando:

 

<?
   class produto{
      //outros metodos
      function insert($nome,$unidade,$grupo,$custo)
        {
            addslashes($nome,$unidade,$grupo,$custo);
            $sql = "INSERT INTO produtos (PRODUTO,UNIDADE,GRUPO,CUSTO,CUSTOMED)                           values('$nome','$unidade','$grupo','$custo','$custo') ";
            $conn = new PDO('mysql:host=localhost;dbname=estoque', 'root','');
            $conn->query($sql);
            unset($conn);
        }
   }
   $produto = new Produto;
   $produto->insert(1, 'Testee','KG',10,'26.80');
?>

outra coisa.. é melhor trabalhar com PDO ou MySqli ?

agradeço a ajuda mais uma vez http://forum.imasters.com.br/public/style_emoticons/default/coolio.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, acho melhor PDO =P

 

Eu também utilizo-o a algum tempo...

 

Mas o método query do PDO é mais utilizado quando vai fazer SELECTs...

 

Tente utilizar o método prepare e execute, é mais seguro e mais rápido (e talvez resolva seu problema):

 

<?php
  class produto{
     //outros metodos
     function insert($cod,$nome,$unidade,$grupo,$custo)
       {
           $conn = new PDO('mysql:host=localhost;dbname=estoque', 'root','');
  $dados_produto = array(
   'nome'=>$nome,
   'foto'=>$unidade,
   'grupo'=>$grupo,
   'custo'=>$custo
  );
  $conn->prepare("INSERT INTO produtos (PRODUTO,UNIDADE,GRUPO,CUSTO,CUSTOMED) VALUES (:nome,:unidade,:grupo,:custo,:custo)")->execute($dados_produto);
           unset($conn);
       }
  }
  $produto = new Produto;
  $produto->insert(1, 'Testee','KG',10,'26.80');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu gostei mt desse metodo:

 

 

<?php
class PDOConnectionFactory{


      public $con = null;

      public $dbType = "mysql";

      public $host = "localhost";
      public $user = "root";
      public $senha = "";
      public $db = "teste";


      public $persistent = false;

      // new PDOConnectionFactory( true ) <--- conexão persistente
      // new PDOConnectionFactory() <--- conexao não persistente
      public function PDOConnectionFactory( $persistent=false ){
		  // verifico a persistência da conexao
		  if( $persistent != false){ $this->persistent = true; }
      }

       

      public function getConnection(){
      try{
      $this->con = new PDO($this->dbType.":host=".$this->host.";dbname=".$this->db, $this->user, $this->senha,

      array( PDO::ATTR_PERSISTENT => $this->persistent ) );


      return $this->con;


      }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }

      }

       

      public function Close(){
      if( $this->con != null )
      $this->con = null;
      }

}
?>

 

 

CLASSE

 

<?php
class Usuario{

}
?>

 

 

 

DAO

 

 

<?php
class UsuarioDAO extends PDOConnectionFactory {
	public $conex = null;


	public function __construct(){
		$this->conex = PDOConnectionFactory::getConnection();
	}

	public function Insere( $objUsuario ){
		try{
			$stmt = $this->conex->prepare("INSERT INTO usuario (id, login, senha, nome, documento, grupo) VALUES (?, ?, ?, ?, ?, ?)");

			$stmt->bindValue(1, $objUsuario->getId() );
			$stmt->bindValue(2, $objUsuario->getLogin() );
			$stmt->bindValue(3, $objUsuario->getSenha() );
			$stmt->bindValue(4, $objUsuario->getNome() );
			$stmt->bindValue(5, $objUsuario->getDoc() );
			$stmt->bindValue(6, $objUsuario->getGrupo() );
			

			$stmt->execute();
			
			$id_inserido = $this->conex->lastInsertId(); 

			

			$this->conex = null;
			return $id_inserido;

		}catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }

	}


}//fim classe
?>

 

para inserir

$objUsuario = new Usuario('parametros');
$UsuarioDAO = new UsuarioDAO();
$UsuarioDAO->Insere($objUsuario);

 

ou entao do jeito que você fez mesmo de juntar as operacoes de banco com a classe de atributos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh.. valeu as dicas.. http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

 

legal esse método seu goruks.. vo salvar aqui e estudá-lo

 

nao tinha nada a ver com meu cód.. pois ainda duplicou..

 

ae eu tirei as paradas do ob_start() q eu uso e nao duplicou..

 

vo ver aqui oq é :x

 

outra coisa.. como eu vejo se houve sucesso na query.. e o num. de rows affected ?

 

nao procurei muito sobre PDO ainda.. depois vo ver alguns materiais.

 

thx..

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

outra coisa.. como eu vejo se houve sucesso na query.. e o num. de rows affected ?

 

 

 

Para ver se houve sucesso ele irá retornar TRUE, senão FALSE...

 

Para ver as linhas afetadas utilize o método rowCount()

 

$conn->rowCount();

Compartilhar este post


Link para o post
Compartilhar em outros sites

aff.. ainda tá repetindo =/

 

olha o cód. inteiro da pagina:

 

<?php
    if(!isset($_GET['pagina']))
    {
        $pagetitle = 'Home';
        //include 'app/conexao.class.php';
        include'template/topo.php';
?>
             <div id="principal">
                    <?php
                        include 'app/produto.class.php';
                        $obj = new produto();
                        $obj->insert('Abacaxi','KG','69',2.80);
                    ?>
             </div>
 <?php
        include'template/rodape.php';
     }
     else
        if(file_exists('views/'.$_GET['pagina'].'.php'))
            include 'views/'.$_GET['pagina'].'.php';
        else
            header('Location:index.php');
 ?>

tem algo errado ai q ele faça duas vezes a query?

 

tirei td e dexei só os comandos na div principal e funcionou normal :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

public function __construct(){
        $this->conex = PDOConnectionFactory::getConnection();
}

Não entendi o porquê de chamar com os "::", já que o construtor não é private...

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.