我已经通过DBI
安装了cpan
模块。 CPAN已配置为使用本地目录,因此我有~/perl5
和~/.cpan
目录。该模块显然位于~/.cpan/build/DBI-1.642-0
中,实际上那里确实有DBI.pm
文件。
但是,当我执行以下命令作为测试时,该命令表明没有“连接”对象:
$ perl -e 'use lib qw( .cpan/build/DBI-1.642-0/ ); DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");'
Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at -e line 1.
环境:基于Debian的发行版,perl 5.26.2。
注意可能的重复项:
附录:从评论中的讨论中可以明显看出,许多用户只关注use DBI
语句。正如我在the comments中提到的:
整个目标是利用通过cpan安装的DBI模块。在安装DBD :: SQLite之前,既不使用lib也不使用DBI提供有效的解决方案。因此,仅使用DBI的建议是没有用的。
请注意,在提出问题之前,我已经尝试过两者 use DBI
和use lib qw()
方法。如我的回答中所述,use DBI
行本身如果不安装DBD::SQLite
模块就无效。
答案 0 :(得分:4)
从命令行脚本转换为实际程序后,您的代码如下:
use lib qw( .cpan/build/DBI-1.642-0/ );
DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");
您收到的错误消息是:
无法通过-e第1行通过包“ DBI”(也许您忘记加载“ DBI”?)找到对象方法“ connect”。
这个错误很明显。
(也许您忘记加载“ DBI”了吗?)
这里的问题是您缺少实际加载DBI模块的代码行。您需要添加以下内容:
use DBI;
您的use lib qw( .cpan/build/DBI-1.642-0/ )
行很奇怪。您要让Perl从安装期间使用的临时构建目录中加载模块。那根本不是您要使用的版本。 cpan
完成工作后,将在标准Perl库目录中安装一个版本的DBI,无需任何use lib
代码即可访问该版本。
我还要补充一点,如果您使用的是系统安装的Perl版本,则无需使用cpan
来安装最受欢迎的模块。您可以使用发行版的预建软件包存储库。例如apt get install libdbi-perl
(在Debian和类似版本上)或dnf install perl-DBI
(在Red Hat上)。
在回答中,您已静默添加了丢失的use DBI
语句,并声称安装DBD :: SQLite解决了您的问题。那可能已经解决了您遇到的另一个问题,但是并没有解决您原来的问题。
答案 1 :(得分:0)
与<button class="btn btn-block btn-round btn-d" id="cfsubmit" name ="cfsubmit" type="button">Submit</button>
$("#cfsubmit").on('click', function (e) {
const $thisBtn = $(this),
$form = $('#contactForm'),
$cfResponse = $('#contactFormResponse'),
formData = $form.serialize();
$thisBtn.text("Sending...");
$.ajax({
url: 'php/contact.php',
type: "POST",
data: formData,
success: function (data) {
$cfResponse.html(data);
$thisBtn.text('Send');
$form.find(':input').val('');
},
error: function ( data ) {
alert("Error occurd! Please try again");
}
});
return false;
});
有关的问题已解决,因为显然未安装SQLite。我必须打开perl -e
shell,然后运行cpan
。现在,命令行可以正常工作:
install DBD::SQLite
关于模块本身,它已安装在$ $ perl -e 'use DBI; my $db = DBI->connect( "dbi:SQLite:dbname=foo.sqlite","","" );my $stmt = qq(CREATE TABLE foo(a int, b text); ); $db->do($stmt)'
$ sqlite3 foo.sqlite
SQLite version 3.23.1 2018-04-10 17:39:29
Enter ".help" for usage hints.
sqlite> .tables
foo
sqlite> .schema foo
CREATE TABLE foo(a int, b text);
sqlite>
目录中。
基于Berserk's answer,以下内容也可用于显式调用:
~/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBD/
为确保此方法显式使用$ perl -e 'use lib qw( /home/user/perl5/x86_64-linux-gnu-thread-multi/DBD ); use DBI; my $db = DBI->connect( "dbi:SQLite:dbname=foo.sqlite","","" );my $stmt = qq(CREATE TABLE foo(a int, b text); ); $db->do($stmt)'
中的库声明,我还在某些测试中清除了use lib qw()
数组。