2012-01-06 8 views
2

Javaアプリケーションを使用してテキストファイルを読み込んで、SQLスクリプトと最終的にはMysqlデータベースに出力します。列の1つは、カンマやアポストロフィのような記号を含む、数行の未整形のテキストで構成されています。問題をもっと難しくするために、私は意図的にテキストを読みやすくするために新しい行を追加しました。 MySQLに問題の原因となる文字の組み合わせを無視させる方法がありますか(主にアポストロフィーですが、これらのテキストのブロックに何が含まれるかを知っています)。どのようにして自動的にmysqlテキストブロック内の文字をエスケープするのですか?

答えて

0

:一言で言えばhttp://dev.mysql.com/doc/refman/5.1/en/string-literals.html

が、これらはここで

\0 An ASCII NUL (0x00) character. 
\' A single quote (“'”) character. 
\" A double quote (“"”) character. 
\b A backspace character. 
\n A newline (linefeed) character. 
\r A carriage return character. 
\t A tab character. 
\Z ASCII 26 (Control+Z). See note following the table. 
\\ A backslash (“\”) character. 
\% A “%” character. See note following the table. 
\_ A “_” character. See note following the table. 

を置き換えるために、文字でどこが/できない、私はいくつかのJavaプログラムではしばらくの間使用してきたものですパラメータバインディングは使用しないでください。

public static String addSlashesSearchMode(String s) { 
    return addSlashes(s, true); 
} 

public static String addSlashes(String s) { 
    return addSlashes(s, false); 
} 

private static String addSlashes(String s, boolean search) { 
    if (s == null) { 
     return s; 
    } 
    String[][] chars; 
    if(!search) { 
     chars = new String[][ ]{ 
       {"\\", "\\\\"}, 
       {"\0", "\\0"}, 
       {"'", "\\'"}, 
       {"\"", "\\\""}, 
       {"\b", "\\b"}, 
       {"\n", "\\n"}, 
       {"\r", "\\r"}, 
       {"\t", "\\t"}, 
       {"\\Z", "\\\\Z"}, // not sure about this one 
       {"%", "\\%"},  // used in searching 
       {"_", "\\_"} 
     }; 
    } else { 
     chars = new String[][ ]{ 
       {"\\", "\\\\"}, 
       {"\0", "\\0"}, 
       {"'", "\\'"}, 
       {"\"", "\\\""}, 
       {"\b", "\\b"}, 
       {"\n", "\\n"}, 
       {"\r", "\\r"}, 
       {"\t", "\\t"}, 
       {"\\Z", "\\\\Z"}, // not sure about this one 
     }; 
    } 
    for (String[] c : chars) { 
     s = s.replace(c[0], c[1]); 
    } 
    return s; 
} 

使用StringUtils.addSlashes("ke\rn\tny's\"\nnew li\\ne%"))

出力:phpmyadminので表示ke\rn\tny\'s\"\nnew li\\ne\%

出力:

ke 
n ny's" 
new li\ne\% 

注:私はAB本当にわからないこと\Z実装から、おそらく誰かがそれについてもっと詳しく説明することができます。

1

最初にエスケープスラッシュを追加する必要があります。\ \のように、実際の一重引用符を意味します。あなたがデータベースに入れている文字列をadd_slash()でPHPを使って自動的にエスケープすることができます。このをお読み

0

私はSQLスクリプトを出力したいと思っていますが、一般的に、データベースに直接アクセスして、ドライバがテキストをエスケープする方がはるかに良いと思います。

SQL:update myTable set value1 =?ここで、value2 =?

そしてコードでPreparedStatementを作成し、setParameterを(1、値1)を呼び出すなど

ドライバはアポストロフィやその他の特殊文字をエスケープの世話をします。

関連する問題