0

Net::OpenSSH Perlモジュールを使用して SSH サーバーに接続し、次のコードを実行しています。

my @cmd = 'mysql -e "SET GLOBAL general_log_file = $log"';
$ssh->system(@cmd);

正しいシェル コマンドは次のとおりです。

mysql -e "SET GLOBAL general_log_file = 'log_name'"

次のエラーが表示されます。

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

私の問題は、変数を正しく解析する方法であることがわかります。

引用を修正するのを手伝ってくれませんか?考えられるすべてのバリエーションをすでに試しました。

ありがとうございました。

4

2 に答える 2

2

回答1のアドバイスとは異なり、スカラーではなくリストを使用する必要がありますが、1つの要素の配列であってはなりません。

my @cmd = (mysql => '-e',  "SET GLOBAL general_log_file = '$log'");
$ssh->system(@cmd);

Net::OpenSSH ドキュメントのShell Quotingを参照してください。

これは、$log 変数に、'

DBI (おそらく Net::OpenSSH の opentunnel を使用) を使用して Mysql サーバーに接続する方法を見つけ、このコマンドを実行するためにプレースホルダーを含む準備済みステートメントを使用する方が良いでしょう。

于 2012-10-15T20:26:57.407 に答える
1

あなたのcmdは、リストではなくスカラーとして実際に定義する必要があります。文字列内で置き換えているため$log、二重引用符で開き、mysql の単一引用符で囲む必要があります。

my $cmd = "mysql -e \"SET GLOBAL general_log_file = '$log'\"";
$ssh->system($cmd);
于 2012-10-15T14:45:01.467 に答える