有什么意义呢,在denver的组装中,一切都运行顺利,但是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()");
在 users 表中有一个带有 A_I 的 id 字段,在 tasters 中也有一个相同的字段,但没有 A_I,两者都指定为 INDEX。表是预先按以下方式创建的:
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
首先,tasters 表的所有字段都标记为非空,没有默认值。您尝试通过仅设置字段来插入一行id
,而其他字段则保留值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)
或更多。