我已经为这个问题纠结了约5个小时,我真的很沮丧,需要一些帮助。
我正在编写一个Perl脚本,从MySQL表中提取作业,然后执行各种数据库管理任务。当前任务是“创建数据库”。脚本成功创建了数据库,但当我要为PHP开发人员生成配置文件时,它就崩溃了。
我认为这是一个引用和解引用变量的问题,但我不确定具体发生了什么。我认为在这个函数调用之后,$$result{'databaseName'}发生了一些变化。这是我得到结果的方法:$result = $select->fetchrow_hashref()
下面是我的函数调用和函数实现:
函数调用(第127行):
generateConfig($$result{'databaseName'}, $newPassword, "php");
函数实现:
sub generateConfig {
my($inName) = $_[0];
my($inPass) = $_[1];
my($inExt) = $_[2];
my($goodData) = 1;
my($select) = $dbh->prepare("SELECT id FROM $databasesTableName WHERE name = '$inName'");
my($path) = $documentRoot.$inName."_config.".$inExt;
$select->execute();
if ($select->rows < 1 ) {
$goodData = 0;
}
while ( $result = $select->fetchrow_hashref() )
{
my($insert) = $dbh->do("INSERT INTO $configTableName(databaseId, username, password, path)".
"VALUES('$$result{'id'}', '$inName', '$inPass', '$path')");
}
return 1;
}
错误:
Use of uninitialized value in concatenation (.) or string at ./dbcreator.pl line 142.
Use of uninitialized value in concatenation (.) or string at ./dbcreator.pl line 154.
第142行:
$update = $dbh->do("UPDATE ${tablename}
SET ${jobStatus}='${newStatus}'
WHERE id = '$$result{'id'}'");
第154行:
print "Successfully created $$result{'databaseName'}\n";
我认为问题来自函数调用,因为如果我注释掉函数调用,一切都运行得很好!如果有人能帮我理解发生了什么,那就太好了。谢谢。附言:如果您注意到数据库中存储密码的安全问题,在这个问题得到正确解决之后会予以解决。= P Dylan