单引号和 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 注入问题影响的东西(这可能是也可能不是安全问题,具体取决于该命令的暴露情况)。如果是这种情况,将每个单引号加倍(更改'
为''
)应该可以在短期内解决问题。