Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl DBI MySQL错误消息:Can';t调用方法";“做”;关于未定义的值_Mysql_Perl_Dbi - Fatal编程技术网

Perl DBI MySQL错误消息:Can';t调用方法";“做”;关于未定义的值

Perl DBI MySQL错误消息:Can';t调用方法";“做”;关于未定义的值,mysql,perl,dbi,Mysql,Perl,Dbi,我试图运行简单的PerlDBI示例脚本来连接mysql数据库并进行一些插入 代码: 但是,当我尝试使用perl filename.pl运行它时,我得到了以下结果 无法对perldbi.pl第12行的未定义值调用方法“do” 这就是我第一次使用do的地方 我尝试过谷歌搜索它,也尝试过各种各样的论坛,但都是徒劳的,如果你知道为什么会发生这种情况,以及发生这种情况的原因,我会非常感谢你的帮助 您的数据库连接失败。因此,$dbh是未定义的 更新:两条评论都是正确的。Sinan给出了正确的答案——OP在每

我试图运行简单的PerlDBI示例脚本来连接mysql数据库并进行一些插入

代码:

但是,当我尝试使用
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的帖子,以避免水平滚动。我对水平滚动的憎恨终于得到了回报。这又是一个使用
警告的好处的例子!对于这样的事情,占位符被开发出来了。对于这样的事情,占位符被开发出来了。