• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

19 mensagens neste tópico

ola! :D

com mysql versao 4.1.18-standard que ista instalado no servidor online

a seguinte instrução de INSERT funciona:

FUNÇÃO EM PHP

 
function comentar($id, $nome, $email, $url, $comentario){
$SQL = "INSERT INTO logs_comments VALUES ('', '$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";
if($this->bd->executarSQL($SQL)){
	return true;
}else{
	return false;
}
}

no meu pc com a versao 5.0.20 isto já n acontece dá erro, mas se eu for ao phpmyadmin consigo inserir os dados na tabela logs_comments.

Apenas a instrução INSERT é que esta a dar problemas ose SELECTS dao bem.

alguma sugestao????

ha alguma alteração de uma versao para a outra????

tks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"Out of range value adjusted for column 'id' at row 1"

este pode ser um possivel erro k dá :S mas nao sei ao certo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para saberes qual é o problema, usa a função mysql_error para identificares em concreto qual o problema.

O problema parece-me de simples resolução, ora mostra lá a estrutura da tabela e esse ug vai ser apanhado num instante.

Ah, outra coisa, nunca faças INSERT INTO tabela VALUES (...), esse "shot cut" é um excelente "ninho de problemas". Usa a sintaxe completa para garantires que não há problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

CREATE TABLE `logs_comments` (
  `id` int(11) NOT NULL auto_increment,
  `id_log` int(11) NOT NULL default '0',
  `nome` varchar(85) NOT NULL default '',
  `email` varchar(85) NOT NULL default '',
  `url` varchar(85) NOT NULL default '',
  `comentario` mediumtext NOT NULL,
  `data` datetime NOT NULL default '0000-00-00 00:00:00',
  `view` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

este é o erro que dá axo eu:

"Out of range value adjusted for column 'id' at row 1"

acabei de alterar o comando de insert para o seguinte e da o mesmo erro

$SQL = "INSERT INTO logs_comments (id, id_log, nome, email, url, comentario, data, view) VALUES ('', '$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A solução é fácil: o ID é um autoincrement, não tens, nem deves, especificá-lo.

$SQL = "INSERT INTO logs_comments (id_log, nome, email, url, comentario, data, view) VALUES ('$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";

Um conselho: aprende BD (modelo lógico, modelo fíciso, sql, etc.) antes de tentares fazer o que quer que seja. Se continuares a fazer coisas sem saber o que fazes vais continuar a esbarrar em problemas "idiotas" como este.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pa isto sao tabelas feitas pelo phpmyadmin, nunca tive problemas kuando usava as versoes antigas do mysql, n tenho culpa k kuando fazem upgrades façam cenas e altere cenas k dpois coisas feitas nas versoes antigas n funcionem :S

opa n digo k saiba tudo de bd sei o minimo para por um site a funcionar minimamente agr k culpa tenho eu se bases de dados feitas com versoes antigas do mysql n funcionem nas versoes + recentes :s

desculpa o incomudo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja agr tirei o id

$SQL = "INSERT INTO logs_comments (id_log, nome, email, url, comentario, data, view) VALUES ('', '$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";

e continua a n deixar adicionar

vou continuar a ver

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pa isto sao tabelas feitas pelo phpmyadmin, nunca tive problemas kuando usava as versoes antigas do mysql, n tenho culpa k kuando fazem upgrades façam cenas e altere cenas k dpois coisas feitas nas versoes antigas n funcionem :S

Calma jovem. Não culpes o o phpMyAdmin e o MySQL pela tua ingorância.

opa n digo k saiba tudo de bd sei o minimo para por um site a funcionar minimamente agr k culpa tenho eu se bases de dados feitas com versoes antigas do mysql n funcionem nas versoes + recentes :s

Se és o responsável pelo funcionamento de algo e a coisa não funciona, então a responsabilidade é tua. A verdade é que não sabes o mínimo para colocar um site a funcionar, sabes apenas algumas coisas, daí te ter dito para aprenderes BDs.

Para saberes o mínimo tens de saber a base, isso sim é o mínimo.

desculpa o incomudo

Não é incómodo nenhum. O que disse foi para teu próprio bem. Podes passar horas ou dias a fio empancado num problema sem jeito nenhum, por isso deves aprender BDs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entao desculpa la se sou ignorante...

a tua solução n resultou :S

atenção n t tou a chamar ignorante : :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entao desculpa la se sou ignorante...

A ignorância não é mal nenhum, a burrice sim! :D

a tua solução n resultou :S

atenção n t tou a chamar ignorante : :wallbash:

Dá o mesmo erro?

Em vez de fazeres o insert, mostra o comando que ele vai executar, com as variáveis instanciadas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

gucapi tenta assim

$SQL = "INSERT INTO logs_comments (id_log, nome, email, url, comentario, data, view) VALUES (NULL, '$nome', '$email', '$url', '$comentario', NOW(), '0')";

Mas acho que vai dar tudo ao mesmo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem é assim eu vou seguir os conselhos do M6

vou dar a solução do problema:

function comentar($id, $nome, $email, $url, $comentario){
$SQL = "INSERT INTO logs_comments (id_log, nome, email, url, comentario, data, view) VALUES ('$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";
if($this->bd->executarSQL($SQL)){
	return true;
}else{
	return false;
}
}

ora bem o erro era este:

function comentar($id, $nome, $email, $url, $comentario){
$SQL = "INSERT INTO logs_comments (id_log, nome, email, url, comentario, data, view) VALUES ('AKI ESTE ID DE AUTOINCREMENTAÇÃO', '$id', '$nome', '$email', '$url', '$comentario', NOW(), '0')";
if($this->bd->executarSQL($SQL)){
	return true;
}else{
	return false;
}
}

eu retirei as plicas e agr funciona é estranho é porque é que nas versoes anteriores à 5 do mysql isto dava certo :s

(pelo menos agr assim funciona)

muito obrigado pela ajuda.

M6 tks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se id_log é auto_increment não precisas defenir id_log por isso colocar $id é inutil só precisas de colocar NULL mas se já esta resolvido ainda bem. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas a tabela era

id - autoincremente

id_log

etc

ect

mas pronto obrigado mais uma vez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então id fica NULL acho que entendeste o que queria dizer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a maneira mais fácil e clara de fazer inserts em php é:

$query = "

INSERT INTO tabela SET

campo1='$var1',

campo2='$var2',

campo3='$var3',

...

campoN='$varN',

";

assim não é necessário meter os autoincrements, não é necessário meter as coisas pela ordem que estão na tabela, é muito mais fácil a leitura  e só se metem os campos que se querem (os restantes ficam com o valor default).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a maneira mais fácil e clara de fazer inserts em php é:

Estou enganado ou isso nada a tem a ver com o PHP, mas sim com a base de dados?

$query = "

INSERT INTO tabela SET

campo1='$var1',

campo2='$var2',

campo3='$var3',

...

campoN='$varN',

";

O único problema com esta sintaxe é que a mesma não é standard, ou seja, nem todos os SGBDs suportam isso. Isto apenas é um problema se a aplicação tiver de funcionar com outros SGBDs como backend.

assim não é necessário meter os autoincrements, não é necessário meter as coisas pela ordem que estão na tabela, é muito mais fácil a leitura  e só se metem os campos que se querem (os restantes ficam com o valor default).

Nunca é necessário meter os autoincrements, eles são geridos pelo próprio SGBD.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a maneira mais fácil e clara de fazer inserts em php é:

Estou enganado ou isso nada a tem a ver com o PHP, mas sim com a base de dados?

Humm... tens razão

$query = "

INSERT INTO tabela SET

campo1='$var1',

campo2='$var2',

campo3='$var3',

...

campoN='$varN',

";

O único problema com esta sintaxe é que a mesma não é standard, ou seja, nem todos os SGBDs suportam isso. Isto apenas é um problema se a aplicação tiver de funcionar com outros SGBDs como backend.

Ele está a falar de MySQL. E se há tanta preocupação com isso o melhor era usar logo o PEAR.

assim não é necessário meter os autoincrements, não é necessário meter as coisas pela ordem que estão na tabela, é muito mais fácil a leitura  e só se metem os campos que se querem (os restantes ficam com o valor default).

Nunca é necessário meter os autoincrements, eles são geridos pelo próprio SGBD.

Se na definição meter o campo de auto-incremento então nos VALUES têm de meter '' ou NULL.

Mas ok... ele pode usar a sintaxe que estava a usar e tirar o campo de auto-incremento.

De qualquer maneira axo a forma que uso muito mais clara eprincipalmente fácil de modificar e corrigir erros. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$query = "

INSERT INTO tabela SET

campo1='$var1',

campo2='$var2',

campo3='$var3',

...

campoN='$varN',

";

O único problema com esta sintaxe é que a mesma não é standard, ou seja, nem todos os SGBDs suportam isso. Isto apenas é um problema se a aplicação tiver de funcionar com outros SGBDs como backend.

Ele está a falar de MySQL. E se há tanta preocupação com isso o melhor era usar logo o PEAR.

Sim eu sei que aqui é MySQL. O que eu estava a dizer é que se a aplicação for desenhada com o propósito de poder trabalhar com outras BDs, então há que ter em conta que o SQL usado deve ser standard. Não havendo essa preocupação, pois pode-se (e deve-se) afinar o SQL para o SGBD especifico.

assim não é necessário meter os autoincrements, não é necessário meter as coisas pela ordem que estão na tabela, é muito mais fácil a leitura  e só se metem os campos que se querem (os restantes ficam com o valor default).

Nunca é necessário meter os autoincrements, eles são geridos pelo próprio SGBD.

Se na definição meter o campo de auto-incremento então nos VALUES têm de meter '' ou NULL.

Mas ok... ele pode usar a sintaxe que estava a usar e tirar o campo de auto-incremento.

De qualquer maneira axo a forma que uso muito mais clara eprincipalmente fácil de modificar e corrigir erros. :P

Olha que não. Um campo auto-incremento basta ser "ignorado" no insert, ou seja, não fazer qualquer referência a ele e o SGBD trata de lhe dar um valor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora