использование DBI вызывает ошибку компиляции файла модуля

  • версия perl - 5.8.8
  • версия mysql - 5.5.42
  • Версия DBI - 1.633, а версия DBD :: mysql - 4.022.

Я нахожусь на сервере виртуального хостинга. У меня есть файл модуля Perl, который отлично работает. Я могу без проблем использовать его подпрограммы из файла сценария Perl. если я добавлю это в файл pm,

use DBI;
my $username = "username";
my $password = "password";
my $dsn = "DBD:mysql:database"; # i changed DBD to DBI as well but no good

до сих пор все работает нормально. но как только я добавляю следующую строку в файл модуля perl, файл сценария perl начинает жаловаться: «Ошибка компиляции при требовании»

my $dbh = DBI->connect($dsn, $username, $password ) or die $DBI::errstr;

Я пробовал погуглить, но безрезультатно. Любая идея?


person shakAttack    schedule 14.04.2015    source источник
comment
Исправьте имя источника данных: оно должно начинаться с DBI:. Похоже, что-то не так с установкой вашего DBD::mysql модуля драйвера. Попробуйте добавить use DBD::mysql под use DBI и посмотрите, какую ошибку вы получите   -  person Borodin    schedule 14.04.2015


Ответы (2)


Я хотел создать дескриптор dbi, который мог бы использоваться подпрограммами этого модуля, но я получал ошибку, прежде чем я мог его использовать (как я уже упоминал в вопросе). Может быть, это функция безопасности модулей, на данный момент я могу использовать dbi только во вспомогательной форме,

использовать DBI;
sub databaseHandle {
my $ username = "username";
my $ password = "password";
my $ dsn = "DBI: mysql: database";
мой $ dbh = DBI-> connect ($ dsn, $ username, $ password) или die $ DBI :: errstr;
return $ dbh}
my $ dbh = databaseHandle ();

Я не знаю конкретной причины, но вот как я ее использую. Спасибо за помощь и идею.

person shakAttack    schedule 19.04.2015

Источником данных должен быть «DBI:mysql:database=my_database», где вы передаете тип и имя вашей базы данных.

Ошибка возникает из-за того, что должен быть установлен модуль драйвера базы данных DBD::mysql. Узнайте у своего хостера, установлен ли этот модуль или вы можете установить его самостоятельно.

person BarneySchmale    schedule 14.04.2015
comment
Отсутствие модуля драйвера приведет к обычному Can't locate DBD/mysql.pm in @INC. OP получает Compilation failed in require, что означает, что файл есть, но содержит ошибку - person Borodin; 14.04.2015
comment
В своем вопросе я упомянул, что у меня dbd :: mysql версии 4.022, так что он есть. - person shakAttack; 14.04.2015