Независимо от того, что я делаю, одно и то же значение хранится в поле таблицы MySQL. - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть таблица MySQL с полем ('ad_id').

Я храню переменные в разных полях с помощью PHP.

В одном из этих полей, поле ad_id, как упомянуто выше, снова и снова хранится один и тот же точный номер, независимо от того, какое имя «REAL» содержится в файле PHP.

Пример: $ad_id= 12345; При попытке сохранить это число 11111 сохраняется. ВСЕГДА, независимо от того, что я изменяю переменную $ ad_id на.

Я даже отображаю переменную $ ad_id, которая на самом деле равна 12345, но в любом случае MySQL хранит значение 11111.

КОД:

mysql_query("INSERT INTO cars_db 
       (ad_id, area, area_community, price, year, mileage, gearbox, fuel, poster_name, poster_email, poster_tel, poster_password, private_or_company, headline, description, salebuy, total_pics, changeable, hide_tel)
VALUES ('$ad_id', '$area', '$kommun', '$price', '$year', '$mile', '$gearbox', '$fuel', '$name', '$email', '$tel', '$ad_passw', '$priv_or_comp', '$headline', '$ad_text', '$forsale', '$nr_of_pics', '$changeable', '$hide_tel')");

Обновление с информацией таблицы MySQL :

CREATE TABLE `cars_db` (
 `id` int(7) NOT NULL AUTO_INCREMENT,
 `ad_id` int(13) NOT NULL,
 `area` varchar(40) COLLATE utf8_swedish_ci NOT NULL,
 `area_community` varchar(50) COLLATE utf8_swedish_ci NOT NULL,
 `price` int(9) NOT NULL,
 `year` int(4) NOT NULL,
 `mileage` int(6) NOT NULL,
 `gearbox` varchar(12) COLLATE utf8_swedish_ci NOT NULL,
 `fuel` varchar(12) COLLATE utf8_swedish_ci NOT NULL,
 `insert_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `poster_name` varchar(40) COLLATE utf8_swedish_ci NOT NULL,
 `poster_email` varchar(50) COLLATE utf8_swedish_ci NOT NULL,
 `poster_tel` varchar(20) COLLATE utf8_swedish_ci NOT NULL,
 `poster_password` varchar(15) COLLATE utf8_swedish_ci NOT NULL,
 `private_or_company` int(2) NOT NULL,
 `headline` varchar(60) COLLATE utf8_swedish_ci NOT NULL,
 `description` text COLLATE utf8_swedish_ci NOT NULL,
 `salebuy` int(2) NOT NULL,
 `total_pics` int(2) NOT NULL,
 `changeable` int(1) NOT NULL,
 `hide_tel` int(1) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=134 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

Обновите снова:

Я попытался установить $ ad_id = 012345678901 (12 цифр), но это не сработало. Еще раз та же проблема. Но затем я попытался установить $ ad_id = 555555, и это сработало, MySQL сохранил эту информацию ... Длина это проблема, я думаю. Есть ли максимум или что-то? Есть ли скрытые десятичные дроби, о которых я не знаю. Если так, как я могу округлить это?


Обновить вставку строки в : Все выглядит хорошо. Даже значение $ ad_id в порядке, 12 цифр, но это не то, что вставлено в MySQL, потому что это другой номер и только 10 цифр!

- AC
- STEREO
- VINTERDÄCK', 'Säljes', '0', '0', '0') 

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

Camran ваш номер слишком велик если вы посмотрите на документацию mysql здесь там написано:

Type  N byte  min value     max value 
INT   4   -2147483648        2147483647

Вы должны генерировать меньшее случайное число, также, если вам нужно, чтобы оно было случайным, вы можете использовать функцию MySQL RAND .

1 голос
/ 17 ноября 2009

Число 668244234626 находится вне диапазона целого числа. Он усекается до максимального значения для целого числа, которое равно 2147483647.

Если вы запустите оператор INSERT в клиенте MySQL, вы получите такой результат:

Query OK, 1 row affected, 1 warning (0.00 sec)

Тогда, если вы показываете предупреждения:

mysql> show warnings;

+---------+------+------------------------------------------------+
| Level   | Code | Message                                        |
+---------+------+------------------------------------------------+
| Warning | 1264 | Out of range value for column 'ad_id' at row 1 |
+---------+------+------------------------------------------------+

Я заметил, что вы заявляете ad_id INT(13). Обратите внимание, что аргумент 13 не влияет на диапазон значений, которые вы можете сохранить в целом числе. Целочисленный тип данных MySQL всегда хранит 32-разрядное число, а значение, которое вы указали, превышает 2 32 .

Если вам нужно сохранить большие значения, вы должны использовать BIGINT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...