8

mysql データベースに直接書き込むのではなく、Perl を使用して .sql ファイルを作成しています。そのファイル内の文字列を引用する必要があります。$dbh-quote() メソッドが私が望むことをしているように見えます。ただし、データベース接続なしで使用する方法がわかりません。ダミーの接続を作成しますが、データベースが実行されていないとこれを行うことができないようです。また、この cron ジョブを実行するマシンには接続がありません。

この質問は似ています:データベースにアクセスせずにPerl DBIと受け入れられた回答は、「必要なドライバーをロードして関数を直接呼び出すことができる」と述べています。これは私がやりたいことですが、わかりませんどうやってするか。

4

3 に答える 3

4

信頼できる引用には、ドライバーが接続の文字セット/照合を理解する必要があります。これは、エスケープがその情報に基づいて変化するためです。

これが、PHP で mysql_escape_string() が、データベース接続プロパティを使用して入力文字列を適切にエスケープする mysql_real_escape_string() に置き換えられた理由です。

于 2012-08-20T00:45:30.887 に答える
3

何が機能するかを理解quoteし、自分で実装する必要があるようです。実際の DB 接続にアクセスできないことは、ショーストッパーになる可能性があります。

于 2012-08-19T23:28:34.890 に答える
0

答えは、「あなたにはできない」という響きのようです。いずれにしても、引用する必要があるものについて、mysqlのドキュメントhttp://dev.mysql.com/doc/refman/5.0/en/string-literals.htmlに従って作成した引用関数を次に示します。

入力は UTF-8、perl は文字列を内部的に UTF-8 で保存、出力は UTF-8、データベースは UTF-8 です。文字セットが一貫していることを考えると、エスケープ目的でそれについてあまり心配する必要はありません。

sub quote(){
    my ($s) = @_;
    $s =~ s/\\\\/\\/g;
    $s =~ s/\'/\\'/g;
    $s =~ s/\"/\\"/g;
    $s =~ s/\x08/\\b/g;
    $s =~ s/\n/\\n/g;
    $s =~ s/\r/\\r/g;
    $s =~ s/\t/\\t/g;
    $s =~ s/\x1A/\\Z/g;
    return $s;
}

私はこの機能をテストしましたが、私が望むことをしているようです。残念なことに、このようなものは、既に書かれているライブラリからはアクセスできません。

于 2012-08-20T13:48:18.277 に答える