【发布时间】:2016-12-22 09:54:28
【问题描述】:
在我们使用的 dbutils.pm 文件中
my $sth = $dbh->prepare($checkUser) or return ($::FALSE,"checkUser prepare failed ");
在此语句中出现错误,例如 can't call method prepare on an undefined value 在此文件中多次使用相同的语句,但我没有收到任何这样的错误。 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代码行。
我们在 dbUtil.pm 文件中多次使用的 $dbh 返回的内容。
请建议我解决此问题。
【问题讨论】:
-
您添加的任何细节都没有改变这种情况。问题是当您使用它调用
prepare()时,$dbh是未定义的。你需要弄清楚为什么它没有在你的程序中设置。 -
我们每次都调用 sub dbLogin() 函数,同时调用 prepare() 就像我的 $dbh= &dbLogin;我的 $sth = $dbh->prepare($checkUser) 或 return ($::FALSE,"checkUser prepare failed");.
-
那么
dbLogin()由于某种原因返回了一个未定义的值。你需要弄清楚为什么会这样。并且,请不要使用&调用子程序。它可能会令人困惑,并且已经有 20 多年没有要求了。 -
为什么它给出了我没有得到的未定义值..因为我们有 2k 行代码并且在那个文件中我的 $dbh=&dbLogin();被使用了很多次......当我们为最后几行代码调用 $dbh->prepare() 时,我们遇到了问题。
-
我不知道。那是你来了解的。如果我正在调试它,我会在三个地方打印
$dbh的值——因为它是从connect()返回的,就在它从dbLogin()返回之前以及在它用于调用prepare()之前。这将向您显示它首先未定义的位置。但如果你是一名程序员,你应该能够自己解决这个问题。
标签: perl