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


Автор: OutlawZ 10.5.2009, 03:01
Код

#!/usr/bin/perl

use DBI;

my ($dsn) = "DBI:mysql:ddd:localhost";

my ($user_name) = "root";
my ($password) = "";
my ($dbh, $sth);
my (@ary);

$dbh = DBI->connect ($dsn, $user_name, $password);
$sth = $dbh->prepare("SELECT * FROM user");
$sth->execute();

while(@ary = $sth->fetchrow_array())
{
 print join("\t",@ary) . "\n";
}
$sth->finish();
$dbh->disconnect();
exit(0);


При работе в nix нормально все выходит, но вот сижу за виндой и при выполнении скрипта выдает:

Код

install_driver(mysql) failed: Can't locate loadable object for module DBD::mysql
 in @INC (@INC contains: D:/Perl/site/lib D:/Perl/lib .) at (eval 4) line 3
Compilation failed in require at (eval 4) line 3.
Perhaps a module that DBD::mysql requires hasn't been fully installed
 at C:\Documents and Settings\Outlaw\╨рсюўшщ ёЄюы\db.pl line 12


Инсталил по новой DBI DBD CSV как показано в доках, но все равно выдает данную ошибку, потом просмотрел каталог "lib" mysql.pm там есть, потов в папках DBI посмотрел там тоже есть mysql.pm не знаю что происходит.

Помогите настроить perl для работы с mysql.

P.S на машине стоит денвер, может проблема в нем?

Автор: DaemonSuw 10.5.2009, 12:38
Скрипт не находит DBD проверти его наличие в папках perl_dir_DENVER\site\lib\DBD\
можете попробывать указать путь к DBD явно, но это неправильно!:
use lib 'the/path/you/DBD'

Автор: OutlawZ 10.5.2009, 13:02
Хм, дело в том что я запускаю денвер, там и там стоит перл, но скрипт я запускаю не с денвера, а так. База данных на локалхосте. Т.е даже если я библиотеку скопирую в денвер в библиотеку он все равно не работает!

А покет DBD::mysql я скачивал он только для unix, точнее makefile.pl он выдает ошибки, говорит что то там не иницилизировано, даже с CPAN и PPM. Заинсталил пакет DBD::mysqlPP что то в это роде но опять нуль эффекта! 

Автор: OutlawZ 10.5.2009, 14:06
Попробовал даже так посоветовали:
Код

use lib 'D:/Perl/lib/DBD';
use DBI;
use strict;

my ($dsn) = "DBI:mysql:ddd:localhost";

my ($user_name) = "root";
my ($password) = "";
my ($dbh, $sth);
my (@ary);

$dbh = DBI->connect ($dsn, $user_name, $password);
$sth = $dbh->prepare("SELECT * FROM user");
$sth->execute();

while(@ary = $sth->fetchrow_array())
{
 print join("\t",@ary) . "\n";
}
$sth->finish();
$dbh->disconnect();
exit(0);


И опять ошибка, в папке DBD есть файлы:

DBD-mysql.ppd
mysql.pm
ExampleP.pm
Proxy.pm
SQLite.pm
.exists
DBM.pm
File.pm
NullP.pm
Sponge.pm
и еще там папка "mysql" в ней два файла:
GetInfo.pm
INSTALL.pod

Вот и все, может чего то не хватает или какой пакет надо установить? 

Запускал с девера такой код:
Код

#!/usr/bin/perl -w
print "Content-Type: text/html\n\n";

use lib '/usr/lib/DBD';
use DBI;

my ($dsn) = "DBI:mysql:ddd:localhost";

my ($user_name) = "root";
my ($password) = "";
my ($dbh, $sth);
my (@ary);

$dbh = DBI->connect ($dsn, $user_name, $password);
$sth = $dbh->prepare("SELECT * FROM user");
$sth->execute();

while(@ary = $sth->fetchrow_array())
{
 print join("\t",@ary) . "\n";
}
$sth->finish();
$dbh->disconnect();
exit(0);

Он вообще нечего не выдал!

Добавлено @ 14:16
Если не кто не знает ответа, тогда вопрос такой есть ли другой способ связи с mysql? читал можно через ODBC?

Автор: DaemonSuw 10.5.2009, 20:23
Как вы устанавливаете модули для перла в денвере? Походу вы вообще ничего не устанавливали в перл который идет в комплекте с денвером!
На сколько мне известно он сильно урезан для удобной транспортировки ;) и там нет ничего из нужных модулей!

Для установки модулей для perl идущий с денвером в комплекте нужно найти ppm manager также идущей в комплекте и выполнить 2 команды
Цитата

ppm i DBD-mysql
ppm i DBI 


Цитата

Он вообще нечего не выдал!


Он и не выдаст ничего! это вам не php! 
Добавьте строку

Код

use CGI::Carp qw(fatalsToBrowser);

и ошибки полезут в браузер!

Автор: OutlawZ 10.5.2009, 20:37
Дело в то что perl который установлен не в денвере, я пичкаю пакетами и потом все пакеты и сам перл заменяю на perl который стоит в денвере. И все пакеты работают! 

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