2012-03-12 2 views
-2

Это мой фрагмент PHP, который я использую для случайной генерации строки генератора в строке, но она не работает. Мне нужен $ АКТСА идти в ACTC поле строки, но это на самом деле не делает этого, он остается 0.Не помещать переменную в таблицу 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()); 

Моей таблица структуры экспортируемой в 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

Вы пытаетесь вставить значение типа string в столбец 'int (11)'. MySQL попытается проанализировать вашу строку, но если она не начинается с цифры, вы просто получите '0'. – Basti

+1

Использование 32 даст вам * слегка лучшее случайное распределение. –

ответ

3

Это выглядит вы инициализируете $ actc как строку, но тип столбца в mysql является int. Вы не можете вставить не-Int в столбец Int.

Также вы цитируете $ actc как мысль, что это строка в инструкции insert. Интс не цитируется в операциях вставки mysql.

+0

Спасибо. Это глупая ошибка меня, по-видимому, изначально планировалось использовать только цифры. –

1

actc является полем INT, поэтому принимаются только числовые значения. Похоже, ваш код может генерировать любую комбинацию букв и цифр.

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 ; 
Смежные вопросы