Ir para conteúdo

POWERED BY:

Arquivado

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

jjoliveira

[Resolvido] erro mysql Duplicate entry

Recommended Posts

fala pessoal quando vou inserir um dado especifico recebo o erro Duplicate entry 'abc' for key 2

teria como fazer uma verificacao nos dados inseridos se caso tiver erro tentar inserir outro dado ex abcd com um if ou algo assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o que você já fez, assim fica mais fácil ajudar

 

 

tabela ta assim

CREATE TABLE IF NOT EXISTS `codigos` (
 `id` int(11) NOT NULL auto_increment,
 `codigo` varchar(11) character set latin1 default NULL,
 `valor` varchar(45) character set latin1 default NULL,
 PRIMARY KEY  (`id`),
 UNIQUE KEY `codigo` (`codigo`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

 

 

$db = mysql_connect("localhost", "root", "root");
$dados = mysql_select_db("testes");

$sql = "INSERT INTO codigos VALUES (NULL, '1234', 'valor')" or die("erro na query!" .mysql_error());

if (mysql_query($sql) == false){
echo "tenho";//se tiver faz a insercao novamente, se a proxima tiver tambem tenta denovo, ate da certo
}else{//nao fas nada
echo "nao tenho, inseri um";	
}

outra coisa

se ele ja tiver o valor queria iniciar o processo novamente e ir tentando ate inserir um que nao tem o codigo gerado, tem que ser unico no banco...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um SELECT procurando por um código específico e use o mysql_num_row para verificar o número de registros encontrados.

Caso não exista, insira o registro.

Caso contrário, refaça o processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um SELECT procurando por um código específico e use o mysql_num_row para verificar o número de registros encontrados.

Caso não exista, insira o registro.

Caso contrário, refaça o processo.

 

sim sim...

o que quero e repetir o processo em um loop se ele conseguir inserir para se nao continua....

como faço isso?

me de uma luz por favor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite,

 

Cara ao meu ponto de vista você esta querendo fazer algo desnecessário.

Pois se o próprio programa vai gerar o código para o produto, você pode utilizar a id do registro como o código de referência do produto.

Agora se o código do produto esta sendo digitado manualmente não precisa de loop é só enviar a pagina anterior e solicitar que o cliente digite outro código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite Leonardo.

 

o codigo gerado e aleatorio. so que quando tiver no banco milhares de dados o codigo gerado pode ser repetido por isso o campo codigo tem o valor de unico para que nao se repita, mais quando eu for inserir um e ja tiver no banco nao vai inserir, ai ele vai tentar inserir denovo caso na nova tentativa da erro teria que tentar novamente ate a hora que um codigo nao tiver ai insere.....

bom e assim que penso,

 

se voce tiver uma dica valiosa de como fazer isso ou outro metodo vou ficar eternamente grato!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para lembrar, você usa o id como primary key e a PK é única então ela não ira se repetir, por isso falei para usa-la como código.

 

De qualquer modo fica outra idéia ai :

<?php
$add = false;

while (!$add)
{
$sql = "SELECT `id` FROM `codigos` WHERE `codigo` = ".rand(1, 99999);
$resultado = mysql_query( $sql);
$linhas = mysql_num_rows($resultado);

if($linhas == 0)
{
	$sql = "INSERT INTO codigos VALUES (NULL, '1234', 'valor')";
	mysql_query( $sql);
	$add = true;
}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para lembrar, você usa o id como primary key e a PK é única então ela não ira se repetir, por isso falei para usa-la como código.

 

De qualquer modo fica outra idéia ai :

<?php
$add = false;

while (!$add)
{
$sql = "SELECT `id` FROM `codigos` WHERE `codigo` = ".rand(1, 99999);
$resultado = mysql_query( $sql);
$linhas = mysql_num_rows($resultado);

if($linhas == 0)
{
	$sql = "INSERT INTO codigos VALUES (NULL, '1234', 'valor')";
	mysql_query( $sql);
	$add = true;
}

}

 

 

 

Cara Perfeitooooo!!!!!

 

parabens..

nem sei como te agradecer...

ajustei o codigo e olha como ficou

 

$n = 0;
$add = false;	
while (!$add){
	$sql = "INSERT INTO codigos VALUES (NULL, '".rand(1, 99999)."')";

       if(mysql_query($sql) == false){
	/*tenta novamente*/$add = false;
	}else{/*para o while*/$add = true;}
	//maximo de 100 tentativas, para o processo e da erro
	if($n++ == 100){$add = true; echo ("erro: exedeu o limite de tentativas");}	
	echo $n++."<br>";
}

 

Voce e o cara!!!

Leonardo (MUITO OBRIGADO MESMO)!

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.