我创建了一个sqlite数据库和一个名为“company”的表。
我的目的是创建一个模块(connect.pm),该模块为数据库处理程序($dbh)提供祝福,数据库处理程序($dbh)是与数据库的连接,通过创建对象,我可以调用connect.pm中提供的insert方法。
当我试图将数据插入数据库时,它会给出以下错误:
dbd::sqlite::db prepare失败:没有这样的表:company at temp.pl
第6行。
dbd::sqlite::db prepare失败:没有这样的表:company at
管线6温度
连接.pm
package Connect;
use strict;
use DBI;
use Data::Dumper;
sub new {
my $class = shift;
my $driver = "SQLite";
my $database = "WEBSITE.db";
my $dsn = "DBI:$driver:dbname:$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1}) or die $DBI::errstr;
my $self = { dbh => $dbh};
print STDERR "Opened database successfully\n";
bless $self, $class;
return $self;
}
sub insert {
my $self = shift;
my ($id, $firstName, $lastName, $email, $comment) = @_;
my $sth = $self->{ dbh }->prepare("INSERT INTO COMPANY VALUES (?, ?, ?, ?, ?)");
my $rv = $sth->execute($id, $firstName, $lastName, $email, $comment) or die $DBI::errstr;
my $value = "Inserted Successfully";
if($rv < 0){
$value = $DBI::errstr;
}
return $value;
}
1;
温度PL
use DBI;
use strict;
use Connect;
my $obj = Connect->new();
my $status = $obj->insert("002", "Test", "User", "a\@b.com", "Comment");
$obj->disconenct();
我可以使用这个程序创建数据库并查询它,这是有效的。
use DBI;
use strict;
my $driver = "SQLite";
my $database = "WEBSITE.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect( $dsn, $userid, $password, { RaiseError => 1 } ) or die $DBI::errstr;
my $sth = $dbh->prepare('INSERT INTO COMPANY VALUES (?, ?, ?, ?, ?)');
my $rv = $sth->execute( "003", "Test", "User", "a\@b.com", "Test Comment" ) or die $DBI::errstr;
最佳答案
模块中的dsn是错误的:“dbi:$driver:dbname:$database”应该是“dbi:$driver:dbname=$database”(dbname后面应该有等号,而不是冒号)。由本网站于1月10日15:57发布的答案是正确的…
关于database - DBD::SQLite::db准备失败:没有这样的表Perl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41550066/