Perl DBI MySQL Error Msg:无法在未定义的值上调用方法“do”

时间:2009-11-05 15:31:50

标签: mysql perl dbi

我正在尝试运行简单的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的地方。

我试图谷歌它也尝试了所有不同类型的论坛,但是徒劳无功,如果你对于为什么会发生这种情况有什么想法,那么这将是非常好的我真的很棒感谢您的帮助。

4 个答案:

答案 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)
});
...