-GWA2 core updates: 容错处理,孤儿占位符

-GWA2 的核心升级了一处容错处理,问题描述为:

如果某个WebApp的实例$obj, 在进行SQL组装时,如果$obj->set 的变量数据与SQL中的占位符(?)不一致时,特别是占位符(?)所指代的变量名未出现时,在SQL拼装时,容易产生将idxArr[0]的值赋予给这个缺失的变量值。这样就导致占位符序列和变量序列错位现象,从而可能到SQL在写入时的错误。这种错误可称之为“孤儿占位符”。

问题的原因是,调用者在使用$obj->set时,在SQL中写入了某个占位符,但并未在$obj-hmf中给定相应的值。一个错误的调用如:
$obj->set(‘b’, $aVal);
$obj->set(‘c’, $bVal);
$result = $obj->setBy(‘a, b, c’, null);
此时的a,没有通过$obj->set赋值,会在后续拼装SQL时出错。

解决的办法是,在拼装匹配占位符和变量时,做变量名和变量值的检查。涉及到的代码在 inc/mysql.class , 如下:

if(strpos($t, $idxarr[$i]) === false){
# in case that, field was not set by $obj->set but written in sql with ‘?’, Sat Apr 2 23:54:48 CST 2016
debug(__FILE__.”: found unmatched field:[$t].”);
$sql = substr($sql,$a+1);
$a = strpos($sql,”?”);
$newsql .= str_replace(“?”, ‘\’\”, $t);
}
else{
$sql = substr($sql,$a+1);
$a = strpos($sql,”?”);
$newsql .= str_replace(“?”,$this->_QuoteSafe($hmvars[$idxarr[$i]]),$t);
$i++;
}

同时也将修改同步到基于 -GWA2 的 -gMIS 中。

This entry was posted in -GWA2, 编程技术, 计算机技术 and tagged , , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注