Perl DBI MySQL错误消息:Can';t调用方法";“做”;关于未定义的值
我试图运行简单的PerlDBI示例脚本来连接mysql数据库并进行一些插入 代码: 但是,当我尝试使用Perl DBI MySQL错误消息:Can';t调用方法";“做”;关于未定义的值,mysql,perl,dbi,Mysql,Perl,Dbi,我试图运行简单的PerlDBI示例脚本来连接mysql数据库并进行一些插入 代码: 但是,当我尝试使用perl filename.pl运行它时,我得到了以下结果 无法对perldbi.pl第12行的未定义值调用方法“do” 这就是我第一次使用do的地方 我尝试过谷歌搜索它,也尝试过各种各样的论坛,但都是徒劳的,如果你知道为什么会发生这种情况,以及发生这种情况的原因,我会非常感谢你的帮助 您的数据库连接失败。因此,$dbh是未定义的 更新:两条评论都是正确的。Sinan给出了正确的答案——OP在每
perl filename.pl
运行它时,我得到了以下结果
无法对perldbi.pl第12行的未定义值调用方法“do”
这就是我第一次使用do
的地方
我尝试过谷歌搜索它,也尝试过各种各样的论坛,但都是徒劳的,如果你知道为什么会发生这种情况,以及发生这种情况的原因,我会非常感谢你的帮助 您的数据库连接失败。因此,$dbh
是未定义的
更新:两条评论都是正确的。Sinan给出了正确的答案——OP在每条线路上都使用my。您的数据库连接失败。因此,$dbh
是未定义的
更新:两条评论都是正确的。Sinan有正确的答案——OP在每条线路上都使用my。正如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)
});
...
正如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)
});
...
我怀疑这是错误消息的原因,但插入中的值可能不正确:
VALUES(CASH, DOLLAR)
应该是:
VALUES(\'CASH\', \'DOLLAR\')
\
是必需的,因为您使用的是'
样式字符串。如果改用“
样式字符串,则可以省略\
:
"... VALUES('CASH','DOLLAR')"
我怀疑这是错误消息的原因,但插入中的值可能不正确:
VALUES(CASH, DOLLAR)
应该是:
VALUES(\'CASH\', \'DOLLAR\')
\
是必需的,因为您使用的是'
样式字符串。如果改用“
样式字符串,则可以省去\
:
"... VALUES('CASH','DOLLAR')"
您有一个额外的
my
:
my $dbh->do(
'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);
把那个my
扔掉
您的脚本中没有真正启用警告
,或者忽略了警告:
#!/usr/bin/perl
use strict;
use warnings;
my $x = 1;
my $x = 2;
C:\Temp>t
“my”变量$x在…的同一范围内屏蔽先前的声明,您有一个额外的
my
:
my $dbh->do(
'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);
把那个my
扔掉
您的脚本中没有真正启用警告
,或者忽略了警告:
#!/usr/bin/perl
use strict;
use warnings;
my $x = 1;
my $x = 2;
C:\Temp>t
如果
使用警告,则“my”变量$x在同一作用域中屏蔽先前的声明,在shebang行中使用-w是多余的。有关更多信息,请参见perldoc perllexwarn
:另外,很有可能,shebang行是错误的。感谢大家在这个问题上指导我。欢迎大家。确保注意所有警告;-)如果使用警告,则在shebang行上使用-w是多余的。有关更多信息,请参见perldoc perllexwarn
:另外,很有可能,shebang行是错误的。感谢大家在这个问题上指导我。欢迎大家。确保注意所有警告;-)我正在输入正确的用户名和密码,所以数据库连接不应该失败。还有什么其他因素会导致数据库连接?因为他有'RaiseError'=>1,如果连接失败,他的程序不会死吗?我正在输入正确的用户名和密码,所以数据库连接应该没有失败的原因。还有什么事情会导致数据库连接?因为他有'RaiseError'=>1,如果连接失败,他的程序不会死吗?我可以从命令行连接到数据库,但当我试图从Perl脚本连接到数据库时,它会给我上述错误消息。@Sinan-谢谢,我的DBI生锈了,我忘记了DBI->errstr
@Ingel:你的意思是“…;host=IP address”
,还是应该是“…:host=IP address”
?我可以从命令行连接到数据库,但当我试图从Perl脚本连接时,它会给我上面提到的错误消息。@Sinan-谢谢,我的DBI生锈了,我忘记了DBI->errstr
@Ingel:你是说>“…;host=IP address”
还是应该是”…:host=IP address“
?我之所以找到它,是因为我在编辑OP的帖子以避免水平滚动。我对水平滚动的憎恨终于得到了回报。这又是一个使用警告的好处的例子!我之所以找到它,是因为我在编辑OP的帖子,以避免水平滚动。我对水平滚动的憎恨终于得到了回报。这又是一个使用警告的好处的例子!对于这样的事情,占位符被开发出来了。对于这样的事情,占位符被开发出来了。