不在MySQL表中放置变量

时间:2012-03-12 21:16:41

标签: php mysql

这是我的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 ;

4 个答案:

答案 0 :(得分:3)

看起来你正在将$ actc初始化为字符串,但mysql中的列类型是一个int。您不能将非Int插入Int列。

你也引用$ actc,因为它是你的insert语句中的一个字符串。在mysql插入语句中没有引用Ints。

答案 1 :(得分:1)

actcINT字段,因此只接受数字值。您的代码看起来可以生成字母和数字的任意组合。

答案 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 ;