这是我的PHP片段,我目前正在使用一个随机生成器字符串连续,但它不起作用。我需要$ actc进入该行的actc字段,但实际上并没有这样做,它保持为0。
$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double)microtime()*1000000);
$i = 0;
$actc = '' ;
while ($i <= 11) {
$num = rand() % 33;
$tmpc = substr($chars, $num, 1);
$actc = $actc . $tmpc;
$i++;
}
mysql_query("INSERT INTO users (username, pass, email, ip, actc)
VALUES ('".$nl."', '".$pw."', '".$email."', '".$_SERVER['REMOTE_ADDR']."', '".$actc."')") or die(mysql_error());
我在SQL中导出的表结构:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(255) NOT NULL,
`pass` varchar(60) NOT NULL,
`email` varchar(255) NOT NULL,
`ip` varchar(20) NOT NULL,
`actc` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4531 ;
答案 0 :(得分:3)
看起来你正在将$ actc初始化为字符串,但mysql中的列类型是一个int。您不能将非Int插入Int列。
你也引用$ actc,因为它是你的insert语句中的一个字符串。在mysql插入语句中没有引用Ints。
答案 1 :(得分:1)
actc
是INT
字段,因此只接受数字值。您的代码看起来可以生成字母和数字的任意组合。
答案 2 :(得分:1)
您正尝试在string
类型列中插入int(11)
类型值。 MySQL将尝试解析您的string
,但如果它不以数字开头,您将获得0
。
只需将列更改为varchar
:
CREATE TABLE IF NOT EXISTS `users` (
[...]
`actc` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
);
答案 3 :(得分:1)
您正在将具有字母数字字符的值存储到指定为int(11)的列中。!
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(255) NOT NULL,
`pass` varchar(60) NOT NULL,
`email` varchar(255) NOT NULL,
`ip` varchar(20) NOT NULL,
**`actc` varchar(11) NOT NULL,**
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4531 ;