perl mysqlデータ挿入時の特殊記号の自動エスケープ処理


シーン:perlでスクリプトを書きます.python、perl、shell言語で書かれたスクリプトを大量に読み込みmysqlに保存します.スクリプトには単一引用符、エスケープ記号、反スラッシュなどの特殊な文字があります.従来のエスケープ記号ではすべての問題を解決できません.
$script_content =~ s/'/\\'/g;
$script_content =~ s/"/\\"/g;

このようなエスケープは単一の二重引用符の問題しか解決できません.スクリプトの内容に記号または/記号があれば、解けません.
 
そのため、DBIを使用します.
Placeholders and Bind Values
プレースホルダとバインド値
my $sql = "insert into command_script(name,content,creater) values('$script',?,'flw521521');";
my $sth = $dbh_mbase->prepare($sql);
$sth->execute("$script_content") or die("SQL Failed:$sql
");

以上のように、スクリプトprepareの場合、スクリプトの内容はプレースホルダですか?表示するのでprepareではエラーは報告されませんが、executeでは具体的な値をバインドすればいいです.
 
スクリプトにどんな特殊な記号があっても、この方法は100%有効であることが実証されています.no error