Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Perl, MySQL и глюки винграда :-)


Автор: shootnix 7.6.2007, 13:10
Здравствуйте. Нужна помощь, сам разобраться что-то не в силах...
Суть проблемы.
Тривиальная задача: передается форма, параметры записываются в таблицу. Форма добавления статьи, соответственно, визивиг-редактор и т.п. Но это уже не суть. Суть в том, что при небольшом количестве данных все проходит успешно, без проблем. Как только объем данных (основного текста)
превышет приблизительно ... ну, скажем, 100-200 символов, запрос просто не срабатывает.

Теперь факты:
1. Структура таблицы
Код

CREATE TABLE `articles` (
  `id` int(50) NOT NULL auto_increment,
  `title` text NOT NULL,
  `author` varchar(100) NOT NULL default '',
  `cut` text NOT NULL,
  `text` text NOT NULL,
  `m` int(3) NOT NULL default '0',
  `d` int(3) NOT NULL default '0',
  `y` int(5) NOT NULL default '0',
  `rate` bigint(100) NOT NULL default '0',
  `hits` int(100) NOT NULL default '0',
  `rubric` int(50) NOT NULL default '0',
  `votes` int(50) NOT NULL default '0',
  `votesumm` int(50) NOT NULL default '0',
  `issue` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `text` (`text`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=21 ;


2. Сами данные передаются в полном объеме, записываются в левый файл, там все в порядке, с любым объемом.

3. Вот это уже от отчаяния smile))
Код

$CGI::POST_MAX=1024 * 1000;


4. Пробовал инсертить через phpMyAdmin — все работает! 
То есть, не работает именно скрипт.. Что делать, ума не приложу. Кто что посоветует?

Автор: JAPH 7.6.2007, 13:28
Ну так если не работает скрипт, то покажите его smile Хотя бы кусок, который формирует и пытается выполнить запрос.

Автор: Бонифаций 7.6.2007, 13:31
...и ошибку которую возвращает привставке большого куска

Автор: Ramirez 7.6.2007, 14:18
а форма не GET'ом случайно передается?

Автор: JAPH 7.6.2007, 15:48
Не, ну если 
Цитата
данные передаются в полном объёме
, то проблема наверняка где-то дальше.

Автор: shootnix 7.6.2007, 18:41
Ага, спасибо, разобрался уже...
Хотя, как сказать smile
Кусок скрипта показать бы рад, но там все сложно замучено-перемучено через свои классы...
В общем, рассказываю smile))
Работал запрос типа:

Код

$dbh->do( qq~INSERT INTO articles( foo, bar, bla-bla, ... ) VALUES ( 'value1', 'value2' 'value3', '...')~ );


Вот он-то как раз не срабатывал на больших данных. 
Покапался в perldoc DBI и нашел вот что:
Код

my $sth = $dbh->prepare( qq~INSERT INTO articles( foo, bar, ... ) VALUES ( ?, ?, ... )~ );
$sth->execute( 'value1', 'value2', ... );


Вот эта штука-то как раз сработала... Теперь. Кто-нибудь мне может сказать, почему???

Автор: JAPH 7.6.2007, 19:09
Ну, не знаю-не знаю... У меня спокойно прошёл
Код
$dbh->do(qq/INSERT INTO `t` VALUES ('/ . 'x' x 200000 . qq/')/); # подсветка супер! :)


А какие-нибудь ошибки скрипт выдавал?

Может, текст содержал одинарную кавычку, что при подстановке приводило к неправильному синтаксису запроса? execute экранирует всё подобное.

Автор: shootnix 7.6.2007, 21:12
Цитата(JAPH @ 7.6.2007,  19:09)
Может, текст содержал одинарную кавычку, что при подстановке приводило к неправильному синтаксису запроса? execute экранирует всё подобное.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)