O segundo INSERT INTO não é processado

-1

Qual é o ponto, na montagem do denver, tudo está funcionando perfeitamente, mas o LAMPP (no Ubuntu 16.04 LTE) não processa o segundo pedido, o php configurou 5.6.

$result2 = mysql_query ("INSERT INTO users (login,password) 
VALUES('$login','$password')");
$result2 = mysql_query ("INSERT INTO tasters SET id=LAST_INSERT_ID()");

Na tabela de usuários existe um campo de id com A_I e o mesmo campo em provadores, mas sem A_I, ambos designados como INDEX. As tabelas são criadas antecipadamente desta maneira:

CREATE TABLE IF NOT EXISTS 'users' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'login' varchar(18) NOT NULL,
'password' varchar(18) NOT NULL,
'status' int(11) NOT NULL DEFAULT '3',
PRIMARY KEY ('id')
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

E:

CREATE TABLE IF NOT EXISTS 'tasters' (
'id' int(11) NOT NULL,
'name' varchar(32) NOT NULL,
'surname' varchar(32) NOT NULL,
'patronymic' varchar(32) NOT NULL,
'sex' int(11) NOT NULL,
'birth' date NOT NULL,
'salary' int(11) NOT NULL,
'marital_status' int(11) NOT NULL,
'children' int(11) NOT NULL,
PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
por ArtyProf 06.04.2018 / 08:17

1 resposta

1

Em primeiro lugar, a tabela de provadores tem todos os campos marcados como não nulos e não tem nenhum padrão. Você está tentando inserir uma linha configurando apenas o campo id , deixando o outro com um valor null . Eu não esperaria que a segunda inserção funcione porque elas são declaradas como não nulas. Então, sua instrução tenta inserir um registro inválido. Definir valores padrão para todos os campos ou defini-los todos em uma instrução de inserção.

Use

CREATE TABLE IF NOT EXISTS 'tasters' (
  'id' int(11) NOT NULL,
  'name' varchar(32) NOT NULL DEFAULT '',
  'surname' varchar(32) NOT NULL DEFAULT '',
  'patronymic' varchar(32) NOT NULL DEFAULT '',
  'sex' int(11) NOT NULL DEFAULT '0',
  'birth' date NOT NULL DEFAULT '1970-01-01',
  'salary' int(11) NOT NULL DEFAULT '0',
  'marital_status' int(11) NOT NULL DEFAULT '0',
  'children' int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ou

INSERT INTO tasters SET id=LAST_INSERT_ID(), name = '', surname = '', patronymic = '', sex = 0, birth = '1970-01-01', salary = '0', marital_status = 0, children = 0;

Em segundo lugar, não armazene senhas simples nos usuários da tabela. Você tem uma função de senha no MySQL. Use isso para armazenar senhas:

INSERT INTO users (login,password) VALUES('$login',password('$password'));

Quando você verificar senhas, use senhas criptografadas:

select * from users where login = $entered_login and password = password($entered_password));

Dessa forma, você não opera com senhas simples e isso aumenta a segurança do seu sistema: Além disso, varchar(18) é muito pequeno: use varchar(64) ou mais.

    
por nobody 06.04.2018 / 09:00