| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > DBI и Хранимые процедуры |
| Автор: djkostya 20.7.2006, 09:59 |
| Ребята есть процедура в Mysql 5 CREATE PROCEDURE `p`() COMMENT 'Procedure' SELECT * FROM test; Вопрос а как обратиться из под DBI к этой процедуре Вроде должно быть call только она не пашет.... |
| Автор: comtat 20.7.2006, 11:18 | ||
| Т.е не пашет ? А что говорит ? И как ты ее вызываешь ? Добавлено @ 11:25 вот так нужно вызывать
|
| Автор: djkostya 20.7.2006, 11:51 |
| DBD::mysql::st execute failed: PROCEDURE agent.proc5 can't return a result set in the given context at test_dbi.pl line 39. Добавлено @ 11:51 Мне нажо чтоб в обратку пришли данные |
| Автор: comtat 20.7.2006, 12:08 |
| Ошибка говорит что не может возвратить набор результата в данном контексте а че на в test_dbi.pl line 39 ?? |
| Автор: djkostya 20.7.2006, 12:09 |
| Ну это скрипт и строка в скрипте... Не подскажешь куда копать???????????? |
| Автор: comtat 20.7.2006, 12:29 |
| Че в этой строке делается ?? не там ли вызывается эта процедура ?? |
| Автор: djkostya 20.7.2006, 12:46 |
| my $sth = $dbh->prepare(qq{CALL p()}); $sth->execute(); my @site; while (my @row = $sth->fetchrow_array() ){ print "$row[0]<br>"; } В 39 вызываеться $sth->execute(); Толк то Пробовал и так my $sth = $dbh->prepare("CALL p()"); $sth->execute(); |
| Автор: djkostya 20.7.2006, 13:11 |
| Самое интересное что в командной строке она нормально выполняеться |
| Автор: comtat 20.7.2006, 13:35 |
| Если ты написал в командной CALL p() и все сработало, а в перле не работает, значит синтаксически все правильно... Очень похоже на несовпадение версий... Сервак 5, а клиент 3... например |
| Автор: djkostya 20.7.2006, 13:49 |
| Нет всё ставил из портов p5-DBD-mysql50-3.0006 Mysql 5.0.22 DBI 1.51 Вопрос вобще кто нибудь их нормально запустил эти процедуры... |
| Автор: comtat 20.7.2006, 15:48 |
| Я даже не знаю чем, тебе щас помочь у меня варианты закончились |
| Автор: comtat 27.7.2006, 07:56 | ||||
я делаю так создаю *.pm файл в нем процедуру
А из *.pl вызываю так
Может применишь такой способ ?? |
| Автор: djkostya 24.10.2006, 21:27 |
| Короче проблема решена объясняю в чём было дело... Если у вас стоит ниже этого DBD-mysql-3.0008_1 то хранимые процедуры пахать не будут будут пахать максимум функции.... Для соединения с базой пользуемся my $dbh = DBI->connect("DBI:mysql:database=$base;host=$hostname;mysql_multi_results=1", "$user", "$password"); Это бяка должна стоять обязательно mysql_multi_results=1 Добавлено @ 21:39 Добавлю под mod_perl часто возникает такая ошибка плохо или хорошо я не знаю, так но вроде пашет DESTROY: Error Commands out of sync; you can't run this command now while close stmt |
| Автор: comtat 25.10.2006, 20:26 |
| Как и предпологались проблема в версии спасибо за инфу возможно прегодится |
| Автор: djkostya 30.10.2006, 16:28 |
| Блин ну я псих Народ что знали все mysql_multi_results=1 отключите её нафиг.....если вы используете хранимые более чем один раз в скрипте... И включите тогда когда вам надо с базы вытаскивать большие запросы.... |