Второй INSERT INTO не обрабатывается

Какой смысл, в блоке Денвера, все работает гладко, но LAMPP (на Ubuntu 16.04 LTE) не обрабатывает второй запрос, php установил 5.6.

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

В пользовательской таблице существует идентификационное поле с A_I и то же поле в дегустаторах, но без A_I, оба назначенные как ИНДЕКС. Таблицы составлены заранее таким образом:

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 ;

И:

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;
-1
задан 5 April 2018 в 23:17

1 ответ

Во-первых, таблица дегустаторов имеет все поля, отмеченные как не пустой, и не имеет никакого значения по умолчанию. Вы пытаетесь вставить строку, только устанавливая id поле, оставляя другой с a null значение. Я не ожидал бы, что вторая вставка будет работать, потому что они объявляются как не пустые. Таким образом, Ваш оператор пытается вставить недопустимую запись. Значения по умолчанию набора для всех полей или набора их всех в операторе вставки.

Использовать

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;

или

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

Во-вторых, не храните простые пароли в пользователях таблицы. У Вас есть функция пароля в MySQL. Используйте это для хранения паролей:

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

Когда Вы проверяете на зашифрованные пароли использования паролей:

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

Таким образом Вы не действуете с простыми паролями, и это увеличивает безопасность Вашей системы: Кроме того, varchar(18) является слишком маленьким: использовать varchar(64) или больше вместо этого.

1
ответ дан 30 October 2019 в 03:27

Другие вопросы по тегам:

Похожие вопросы: