无法调用方法准备在未定义的值 perl 上



在butils中。我们正在使用的PM文件

my $sth = $dbh->prepare($checkUser) or return ($::FALSE,"checkUser prepare failed "); 

在这个语句中得到错误,如不能在未定义的值上调用方法prepare 在这个文件中多次使用相同的语句,但我没有得到任何这样的错误。准备($checkUser) -> checkUser是SQL查询和它返回的东西。查询它的返回值没有问题。

我们使用sub dbLogin { }函数。在这个函数中,我们给出了:

$dbh = DBI->connect('DBI:Or‌​acle:DBname', 'username', 'pwd')
  or die "Couldn't connect to database: " . DBI->errstr;

这个函数返回$dbh,因此根据您的建议,我们已经使用了行中的$dbh代码。

$dbh返回的是我们多次使用的&这是我的地方。点文件。

请建议我如何解决这个问题

表示$dbh不正确。请像下面这样写下你的$dbh,看看它是否无法连接。

my $dbh = DBI->connect($data_source, $username, $auth, %attr)
                or die "Couldn't connect to database: " . DBI->errstr;

或者

my $dbh = DBI->connect($data_source, $username, $auth, { RaiseError => 1 });

根据你编辑的问题:

在调用dbLogin子程序之后(就在prepare语句之前)打印$dbh的dump,看看它是否未定义。如果是这种情况,那么您需要进一步调试以查看是什么修改了$dbh

好的,让我们来看看这个错误。

不能对未定义的值调用prepare方法

Perl告诉您正在对一个未定义的值调用prepare()方法。这是什么意思?

在你的代码中有这样一行:

my $sth = $dbh->prepare(...);

这里,prepare()是在对象$dbh上调用的方法。如果Perl告诉你,你在一个未定义的值上调用它,那么此时你的代码$dbh一定是未定义的。

因此,您需要查看您认为$dbh被赋予值的位置。那个代码不知怎么出了问题。你需要添加更多的错误检查,以便找出哪里出了问题。Chankey建议的代码看起来是一个很好的开始。

最新更新