1

次のスクリプトを使用していますが、エラーメッセージ
tclがスローされています。

eval {
     add command "Audit Param"\
     setting "Error : Part's and Spec's desc contains \"OBS\" or \"REPLACE\"" "(Reference No)"\
     user all;
}  

次のようにエラーが表示されます:Expected word got 'and'
で試しましPart\'sたが、まだ機能しません。一重引用符と二重引用符の両方がある場合、両方をエスケープするにはどうすればよいですか?

4

1 に答える 1

4

一重引用符と Tcl

Tcl 自体では、単一引用符 ( ') には特別な意味はまったくありません。,コンマ ( ) やピリオド( ) などの普通の文字.です。(コンマが式で特別な意味を持ち、ピリオドが浮動小数点値と Tk ウィジェット名で使用されることを除いて。比較すると、単一引用符はまったく意味がありません。) ) コマンドに限定されaddます。

複雑な引用の状況は、多くの場合、別の引用戦略を使用して Tcl で解決されます。特に、中括弧で囲むと、すべての置換が無効になります(バックスラッシュ-改行-空白の折りたたみを除く)。これにより、あなたが書いたものと同等のものを書くことができます:

add command "Audit Param" \
      setting {Error : Part's and Spec's desc contains "OBS" or "REPLACE"} \
      "(Reference No)" user all

ここでの苦情はそのコード内から来ており、コード自体に書かれているわけではありません。(eval { ... }は何も追加しません。また、コードが少し読みにくくなる以外にペナルティも発生しません。)

本当の問題

非常に大まかな推測では、その問題の文字列は、準備されたパラメーターの代わりに直接文字列置換を使用して SQL ステートメント内で使用されています。そのようなエラー メッセージが表示される可能性があります。エラーが発生した後にグローバルerrorInfo変数の内容を確認して、問題の原因を突き止めるのに役立つスタック トレースを取得します。これは、コードが失敗している内部の場所を確認するのに役立つ場合があります。それがいたずらな SQL の一部である場合、SQL インジェクションの問題に対して脆弱な何かがあるため、修正するコードがあります (そのコマンドの露出に応じて、セキュリティの問題である場合とそうでない場合があります)。その場合、各単一引用符を 2 倍にする (に変更'する'') と、短期的には問題を回避できるはずです。

于 2012-09-04T19:16:46.327 に答える