私はこの問題について約5時間頭を悩ませてきましたが、本当にイライラしていて、助けが必要です。
MySQLテーブルからジョブを引き出してさまざまなデータベース管理タスクを実行するPerlスクリプトを書いています。現在のタスクは「データベースの作成」です。スクリプトはデータベースを正常に作成しますが、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
ディラン