LINUX.ORG.RU
решено ФорумAdmin

Глюк с MySQL помогите разобраться


0

2

Добрый день, выполняю запросы в MySQL из PHP, php не каких ошибок не возвращает, включил log в mysql запросы приходят, если их скопировать и выполнить в консоле mySQL всё добавляется. А через PHP без полезно.


		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кулеры
', 'Кулер THERMALTAKE CL-P0504 ,92мм,2500 об/мин,27 дБ, s775', '010000047', '1', '340', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Процессоры
', 'Процессор Intel Celeron 430, LGA 775, 0.5Мб, (HH80557RG033512)', '010000048', '1', '1550', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Жесткие диски
', 'Жесткий диск Seagate Barracuda 3.5" [ST3250318AS] 250Gb Cache 8Mb,7200rpm,SATA-3', '010000050', '1', '3000', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки
', 'Кабель Адаптер Molex — POWER SATA', '010000052', '9', '60', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Маршрутизаторы, коммутаторы,Точки доступа
', 'Коммутатор D-Link DGS-1005D 5x10/100/1000Base-T[DGS-1005D/GE]', '010000091', '1', '1450', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Многоплоскостные сканеры
', 'Сканер штрихкода MК-3780 Fusion USB белый', '010000097', '1', '10500', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Одноплоскостные сканеры
', 'Сканер штрихкода МК-9540 Voyager RS232 белый', '010000099', '1', '5500', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки
', 'Кабель LPT DB25(m)-CN36(m),Bitronix 3м', '010000103', '5', '320', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки
', 'Кабель SATA - SATA, 0.45м', '010000104', '12', '60', 'none')
		331513 Query	INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Сетевые карты
', 'Сетевая карта D-Link DGE-528T 10/100/1000 MBps, PCI', '010000112', '9', '520', 'none')


Последнее исправление: mannaz2004 (всего исправлений: 1)

Ответ на: комментарий от mannaz2004

запрос выполняю так

$baza=mysql_connect("192.168.0.1","shop","shop");
mysql_select_db("shop",$baza);?>



mysql_query("INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('".$price[$j]['category']."', '".$price[$j]['name']."', '".$price[$j]['cod']."', '".$price[$j]['count']."', '".$price[$j]['cost']."', 'none');",$baza);

mannaz2004
() автор топика
Ответ на: комментарий от pylin

Странно конечно, но не понятно. Я использую движок InnoDB. Нашёл на форуме что «SET AUTOCOMMIT=1», каждое изменения будет одна транзакция, а если «SET AUTOCOMMIT=0» то нужно начинать с Выставляю я в начале перед ставкой

mysql_query("SET  AUTOCOMMIT=1",$baza);
Одно изменения одна транзакция, в этоги ноль результата. Я так понимаю если AUTOCOMMIT=0 то нужно написать в начале «START TRANSACTION» и в конце COMMIT чтоб записались изменения. Но я ведь выставляю AUTOCOMMIT=1, где каждая новое изменения это одна транзакция. Или я что та не понимаю? При этом таблица как была пустой так и осталось
140402 15:49:33 332254 Connect  shop@192.168.0.223 on
                332254 Init DB  shop
                332255 Connect  shop@192.168.0.223 on shop
                332255 Query    SET NAMES 'utf8'
                332255 Query    SELECT * FROM menu
                332254 Init DB  shop
                332254 Query    SET NAMES 'utf8'
                332254 Query    SELECT `id`, `cod`, `name`, `number`,`cost`,`category` FROM price
                332254 Query    SET  AUTOCOMMIT=1
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Системные аппараты АСПД
', 'АСПД Штрих-Light для ЕНВД', '010000015', '2', '9500', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Мыши
', 'Мышь GENIUS NetScroll 100, PS/2, серебристая проводная оптическая', '010000030', '2', '330', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кулеры
', 'Кулер THERMALTAKE CL-P0504 ,92мм,2500 об/мин,27 дБ, s775', '010000047', '1', '340', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Процессоры
', 'Процессор Intel Celeron 430, LGA 775, 0.5Мб, (HH80557RG033512)', '010000048', '1', '1550', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Жесткие диски
', 'Жесткий диск Seagate Barracuda 3.5" [ST3250318AS] 250Gb Cache 8Mb,7200rpm,SATA-3', '010000050', '1', '3000', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки
', 'Кабель Адаптер Molex — POWER SATA', '010000052', '9', '60', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Маршрутизаторы, коммутаторы,Точки доступа
', 'Коммутатор D-Link DGS-1005D 5x10/100/1000Base-T[DGS-1005D/GE]', '010000091', '1', '1450', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Многоплоскостные сканеры
', 'Сканер штрихкода MК-3780 Fusion USB белый', '010000097', '1', '10500', 'none')
                332254 Query    COMMIT
                332254 Query    INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Одноплоскостные сканеры
', 'Сканер штрихкода МК-9540 Voyager RS232 белый', '010000099', '1', '5500', 'none')
                332254 Query    COMMIT

mysql сам добавляет COMMIT после каждого изменения. Тогда в чём проблема почему не добавляються записи

mannaz2004
() автор топика
Последнее исправление: mannaz2004 (всего исправлений: 1)

может php не на тот mysql-сервер запросы шлёт?

anonymous
()
Ответ на: комментарий от mannaz2004

Глюк связан с связкой ключей, но не пойму почему, причём если выполнять больше одно запроса

INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Многоплоскостные сканеры', 'Сканер штрихкода MК-3780 Fusion USB белый', '010000097', '1', '10500', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Одноплоскостные сканеры', 'Сканер штрихкода МК-9540 Voyager RS232 белый', '010000099', '1', '5500', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки', 'Кабель LPT DB25(m)-CN36(m),Bitronix 3м', '010000103', '5', '320', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Кабели, шлейфы, переходники,розетки', 'Кабель SATA - SATA, 0.45м', '010000104', '12', '60', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Сетевые карты', 'Сетевая карта D-Link DGE-528T 10/100/1000 MBps, PCI', '010000112', '9', '520', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('IP камеры', 'IP-камера D-Link DCS-920 1x10/100Base-TX + 802.11n (до 150Mbit/s), до 640x480, CMOS', '010000127', '1', '3849', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Модули памяти', 'Память NCP DDR2- 1024MB PC6400, 800Mhz,DIMM', '010000148', '1', '350', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Контроллеры', 'Контроллер 4x COM Port Orient XWT-PS054 (2 внешн. 9pin + 2 внутр. 9pin),PCI', '010000176', '1', '890', 'none');
INSERT INTO `price` (`category`, `name`, `cod`, `number`, `cost`, `manufacturer`) VALUES ('Контроллеры', 'Контроллер 1x LPT (1 внешн.) Orient XWT-SP04,PCI', '010000177', '1', '550', 'none');
Query OK, 1 row affected

1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
1452 - Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

mannaz2004
() автор топика
Ответ на: комментарий от ZUKMAN
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
  `id` varchar(45) NOT NULL COMMENT 'Поле каторое будет со',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mannaz2004
() автор топика
Ответ на: комментарий от mannaz2004

Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)Cannot add or update a child row: a foreign key constraint fails (`shop`.`price`, CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

facepalm

emulek
()

opencart отстой. а по делу – проверь хдд на наличие места, посмотри логи mysql (они могут быть например тут /var/log/mysql/). А ещё посмотри логи опенкарта и веб сервера. Провреь пользователя мускуля с которым добавляешь – у него прав может не быть, например

wwwsevolod
()
Ответ на: комментарий от mannaz2004

при чём тут библиотека? Тут же всё написано в сообщении об ошибке. Исправляй свою кривую структуру своей БД.

emulek
()
Ответ на: комментарий от mannaz2004

Насчёт PDO человек, прав. Лучше его использовать. Не хочешь PDO, используй, хотя бы, mysqli. Он поддерживает не только объектный стиль, но и процедурный. Со стандартной библиотекой замучаешься писать кучу проверок вводных данных.

По теме - покажи ещё структуру таблицы price, и на всякий пожарный посмотри в какой кодировке php отправляет данные на сервер mysql. А вообще не плохо было бы переделать таблицу category, сделать id числовым полем, добавить поле 'название категории', а в таблице price, категорию тоже сделать числовым полем, и вставлять туда именно число из таблицы category.

Toten_Kopf
()
Ответ на: комментарий от Toten_Kopf
-- Table structure for `price`
-- ----------------------------
DROP TABLE IF EXISTS `price`;
CREATE TABLE `price` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category` varchar(45) DEFAULT NULL COMMENT 'Категории тавара',
  `name` varchar(240) DEFAULT NULL COMMENT 'Наименования товара',
  `cod` int(11) DEFAULT NULL COMMENT 'Код товара',
  `number` int(11) DEFAULT NULL COMMENT 'Количество тавара',
  `cost` float DEFAULT NULL COMMENT 'Цена товара',
  `img` varchar(45) DEFAULT NULL COMMENT 'Содержиться название файла фотки',
  `characteristics` text COMMENT 'характеристики',
  `manufacturer` varchar(30) DEFAULT '-' COMMENT 'Производитель',
  `descriptions` text COMMENT 'Описания',
  PRIMARY KEY (`id`),
  KEY `m` (`category`) USING BTREE,
  KEY `manufacturer` (`manufacturer`) USING BTREE,
  CONSTRAINT `m` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `mmm` FOREIGN KEY (`manufacturer`) REFERENCES `manufacturer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15858 DEFAULT CHARSET=utf8;


Я понимаю что числовое лучше использовать, быстрей будет выборка и так далия, но пока на это мазгов не хватает. Так что с моей таблиц ой не так? В логах запросов MySQL всё нормально отображаеться кодировка, если бы что та не так то яб увидел в логах MySQL. Я верю что PDO и mysqli класная вещь но пока не для меня, всему своё время

mannaz2004
() автор топика
Последнее исправление: mannaz2004 (всего исправлений: 2)
Ответ на: комментарий от mannaz2004

Блин, правильный ответ будет - с ней всё не так. Реально, у тебя, судя по этой таблице, везде будет такая катастрофа. Тебе необходимо переделать схему базы. Во первых ты уже используешь ограничения, кто тебе мешает сделать эти поля числовыми? Мозги тут не при делах. Далее, я бы индексам дал бы разные имена, это между делом. Ты в поле manufacturer ставишь по умолчанию '-', а во вставках у тебя везде 'none', смысл? Если ты пока не наткнулся на проблему в этом месте, то наверное только потому, что уже накосячил с первым ограничением. Тебе же написано, что у тебя проблема с внешними ключами.

Воспользуйся Mysql Workbench, составь схему с его помощью, а то ты так ещё очень долго будешь косяки отлавливать.

Toten_Kopf
()
Ответ на: комментарий от Toten_Kopf

База тестовая и пока пишется none потом всесто none, Будет производитель. Касяк нашёл, забыл отсечь символ переноса так как остатки гружу из фай лика, а поскольку «category» было последние поле в результате перенос на новую строку хватало. Всем большое спасибо. Очень много нового и полезного узнал, буду использовать mysqli, и Commit_(SQL) тоже поможет разгрузить сервер. Всем большое спасибо за помощь. Всем благодарин.

mannaz2004
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.