在butils中。我们正在使用的PM文件
my $sth = $dbh->prepare($checkUser) or return ($::FALSE,"checkUser prepare failed ");
在这个语句中得到错误,如不能在未定义的值上调用方法prepare 在这个文件中多次使用相同的语句,但我没有得到任何这样的错误。准备($checkUser) -> checkUser是SQL查询和它返回的东西。查询它的返回值没有问题。
我们使用sub dbLogin { }
函数。在这个函数中,我们给出了:
$dbh = DBI->connect('DBI:Oracle: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建议的代码看起来是一个很好的开始。