Jump to content

INSERT dá erro


gucapi
 Share

Recommended Posts

ola! 😄

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

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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')";
Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

entao desculpa la se sou ignorante...

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

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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...

Link to comment
Share on other 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

Link to comment
Share on other 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. :)

Link to comment
Share on other 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).

Alguem me explica para que é que serve a porra do XML ?

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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

Alguem me explica para que é que serve a porra do XML ?

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.