我正在尝试运行简单的perl dbi示例脚本来连接到mysql数据库并进行一些插入。
代码:
#! bin/usr/perl -w
use strict;
use warnings;
use DBI();
my $dbh = DBI->connect(
"DBI:mysql:database=SPM;host=IP Address", "username", "password",
{'RaiseError'=>1}
);
my $dbh->do(
'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);
my $dbh->disconnect();
但是当我尝试使用perl filename.pl
运行时,我得到了
Can't call method "do" on an undefined value at perldbi.pl line 12
这是我第一次使用do
的地方。
我试图谷歌它也尝试了所有不同类型的论坛,但是徒劳无功,如果你对于为什么会发生这种情况有什么想法,那么这将是非常好的我真的很棒感谢您的帮助。
答案 0 :(得分:10)
您还有一个my
:
my $dbh->do(
'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);
摆脱my
。
您要么在脚本中没有启用warnings
,要么忽略了警告:
#!/usr/bin/perl
use strict;
use warnings;
my $x = 1;
my $x = 2;
C:\Temp> t "my" variable $x masks earlier declaration in same scope at ...
答案 1 :(得分:2)
我怀疑这是错误消息的原因,但插入中的值可能不正确:
VALUES(CASH, DOLLAR)
应该是:
VALUES(\'CASH\', \'DOLLAR\')
\
是必需的,因为您使用的是'
样式字符串。如果您使用"
样式字符串,则可以省略\
:
"... VALUES('CASH','DOLLAR')"
答案 2 :(得分:1)
您的数据库连接失败。所以 $dbh
未定义。
更新:两条评论都是对的。思南有正确的答案 - OP在每一行都使用我。
答案 3 :(得分:1)
正如daotoad所说,你的DBI->connect
电话失败了。检查连接设置,查看是否可以从命令行连接到数据库等。在Perl脚本中,始终检查DBI->connect()
的返回值以查看连接是否成功。
my $dbh = DBI->connect("DBI:mysql:database=SPM;host=IP Address",...)
or die sprintf( 'connect() failed. Error: %s', DBI->errstr);
my $dbh->do(q{
INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)
});
...