2012-03-12 49 views
-2

这是我的PHP片段我目前正在使用将一个随机生成器字符串放在一行中,但它不工作。我需要$ ACTC进入该行的ACTC领域,但实际上并没有这样做,它停留在SQL出口0.1不把变量放在MySQL表中

$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()); 

我的表结构:

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

您试图向'int(11)'类型列中插入'string'类型的值。 MySQL会尝试解析你的'字符串',但如果它不是以数字开头的,你只会得到'0'。 – Basti 2012-03-12 21:19:36

+1

使用32会给你一个*稍微*更好的随机分布。 – 2012-03-12 21:19:58

回答

3

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

另外你还引用了$ actc,因为它是你插入语句中的一个字符串。 MySQL插入语句中没有引用Ints。

+0

谢谢。这是我的一个愚蠢的错误,一定是原本计划只使用数字。 – 2012-03-12 21:23:50

1

actcINT字段,因此只接受数字值。它看起来像你的代码可以产生任何字母和数字的组合。

1

您试图将string类型值插入到int(11)类型列中。 MySQL会尝试解析你的string,但是如果它不是以数字开头的话,你只会得到0

列只需更改为varchar

CREATE TABLE IF NOT EXISTS `users` (
    [...] 
    `actc` varchar(11) NOT NULL, 
    PRIMARY KEY (`id`) 
); 
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 ;