Я бьюсь над этой проблемой уже около 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";
Причина, по которой я думаюпроблема возникает из-за вызова функции, потому что, если я закомментирую вызов функции, все будет отлично работать!
Если кто-нибудь может помочь мне понять, что происходит, это было бы здорово.
Спасибо,
ps Если вы заметили проблему безопасности, когда все пароли хранятся в виде обычного текста в базе данных, это будет исправлено после того, как все заработает правильно.= P
Дилан